可能重复:
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中实现的算法。
提前致谢
答案 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