Kadane算法
目标:和最大子串
目标性质:
- 目标前缀子串和与后缀子串和均大于0
我们分割源数组成若干子串。切割方式:
- 子串和小于0(除了最后一个子串之外)
- 子串的前缀子串和大于0
由1,2我们推得
- 子串的后缀子串和小于0
由1,3推得
- 目标是某一子串的子串(即目标不可能跨越多个子串)
然后由2,4推得
目标是某子串的前缀子串
最终,
我们在分割子串的过程中就能把目标的和(或者是目标)求出来
int substring_maxsum(int *A,int n)
{
int maxNum = 0; //目标和
int sum = 0;
for(int i = 0;i < n;i++)
{
sum += A[i];
if(sum < 0)
{
sum = 0;
}
else if(sum > maxNu)
{
maxNum = sum;
}
}
return maxNum;
}
本文深入探讨了Kadane算法,一种高效寻找数组中最大子数组和的算法。通过逐步解析算法逻辑,我们理解了如何在遍历数组过程中动态更新最大子数组和,避免了冗余计算,实现了O(n)的时间复杂度。

1万+

被折叠的 条评论
为什么被折叠?



