最大子串和问题
最大子串和有个比较巧妙的解决办法
代码
int MaxSubseqSum4(int A[], int N)
{
int ThisSum=0, MaxSum =0;
int i;
for(i = 0; i < N; i++)
{
ThisSum += A[i]; /* 向右累加 */
if(ThisSum>MaxSum)
MaxSum = ThisSum; /* 发现更大和则更新当前结果 */
else if(ThisSum<0) /* 如果当前子列和为负 */
ThisSum = 0; /* 则不可能使后面的部分和增大,抛弃 */
}
return MaxSum;
}
思想
先遍历,从前到后
用ThisSum记录当前的累加情况,MaxSum记录最大的子串和
在遍历的过程中会累加
最重要的部分就是条件判断部分
- 当发现当前记录的累加情况比MaxSum记录的情况要大,那就更新MaxSum的值
- 如果发现某时刻的子列和为负,则舍弃当前记录的累加情况,因为这部分不可能使得后面的部分增大