我找到了寻找最大连续子阵列的最佳解决方案。而且这种算法称为Kadane算法。这是我在geeksforgeeks上找到的pseduocode。
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
我不理解的部分是(b),当max_ending在这里小于0时,为什么max_ending设置为0?这背后的直觉是什么?
答案 0 :(得分:2)
您希望重置最大值,因为可能会偏移最大值的任何潜在负数组元素
例如,
2 3 -6 4 2
在元素-6
,如果你没有在这里重置最大值,那么你将-1
的最大值带到下一次迭代中。
答案 1 :(得分:0)
如果max_ending_here
小于0进入(b)部分,则意味着使用此元素的最大总和小于0.这里的结尾总和比这里结束的更好,这是只需要一个长度为0的子阵列。这就是我们在(b)部分所做的事情。
基本上,如果我们在(b)部分输入if
,我们就会丢弃所有先前的元素并从头开始创建子阵列。