如果我错过了一些关于输入的假设,我很抱歉,但是这个算法是否因 {2,-3,1} 之类的输入而失败?
处理 -3 时,currentSum获得 2+(-3)= -1 ,并且currentStartIndex重新开始! 我忽略了一些明显的东西吗?
答案 0 :(得分:1)
不,它没有 - 在这种情况下,因为总和现在是-1
,它会被重置 - 你意识到了。
但是,在重置之前,在之前的索引中,最大值保存为值 - 2
- 此时,因为它大于0
,之前的最大值
if currentMaxSum > maxSum then
(maxSum, maxStartIndex, maxEndIndex) := (currentMaxSum, currentStartIndex, currentEndIndex)
endif
所以最后算法会给你2
,这是最大值
这个算法只有一个问题,即在所有元素都是负数的情况下,它会给你0
,这意味着最好的是一个空数组。这个答案的正确性取决于你是否允许空数组。