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;
}