kadane算法 - 对输入的任何顺序约束?

时间:2013-06-14 15:06:59

标签: algorithm dynamic-programming kadanes-algorithm

如果我错过了一些关于输入的假设,我很抱歉,但是这个算法是否因 {2,-3,1} 之类的输入而失败?

处理 -3 时,currentSum获得 2+(-3)= -1 ,并且currentStartIndex重新开始! 我忽略了一些明显的东西吗?

http://www.algorithmist.com/index.php/Kadane%27s_Algorithm

1 个答案:

答案 0 :(得分:1)

不,它没有 - 在这种情况下,因为总和现在是-1,它会被重置 - 你意识到了。

但是,在重置之前,在之前的索引中,最大值保存为值 - 2 - 此时,因为它大于0,之前的最大值

if currentMaxSum > maxSum then
            (maxSum, maxStartIndex, maxEndIndex) := (currentMaxSum, currentStartIndex, currentEndIndex)
endif

所以最后算法会给你2,这是最大值

这个算法只有一个问题,即在所有元素都是负数的情况下,它会给你0,这意味着最好的是一个空数组。这个答案的正确性取决于你是否允许空数组。