最大和的连续子阵列(访谈问题)

时间:2011-03-21 13:32:23

标签: java c++ c algorithm

  

可能重复:
  Find the maximum interval sum in a list of real numbers.

我今天在Adobe面试中被问到以下问题,担任软件工程师的职位。

问题给定整数数组arr[1..n]。编写一个算法来查找数组中具有最大总和的连续子阵列的总和。如果所有数字都是负数,则返回0.

示例

给定数组arr[1..6] = [ 12, 14, 0, -4, 61, -39 ]

回答

83使用[ 12, 14, 0, -4, 61 ]构建。

我可以提出在O(n logn)中运行的解决方案,但我认为它不是非常有效。面试官要我写一个O(n)算法。我无法想出来。

有关如何为此问题编写O(n)解决方案的任何想法? 要在C / C ++ / Java中实现的算法。

提前致谢

1 个答案:

答案 0 :(得分:15)

您可以使用在O(n)中运行的Kadane's algorithm

这是算法(从here无耻地复制)

Initialize:
    max_so_far = 0
    max_ending_here = 0

Loop for each element of the array
  (a) max_ending_here = max_ending_here + a[i]
  (b) if(max_ending_here < 0)
            max_ending_here = 0
  (c) if(max_so_far < max_ending_here)
            max_so_far = max_ending_here
return max_so_far