算法的优化过程:
①算出所有连续子列和,再从中找出最大值。
②对求所有连续子列和的过程进行优化:假定ThisSum是从A[i]到A[j]的子列和,那么对于相同的i,不同的j,只要在j-1次循环求和的基础上累加上A[j]即可。
具体实现方法:在①步骤的基础上,去除第三重循环并改变ThisSum归零的位置。
③"分而治之":将数组从中间一分为二,递归地求左边数组的最大子列和以及右边数组的最大子列和,还需要求跨越边界的最大子列和。
④"在线处理":
int MaxSubseqsum(int A[],int N) { int ThisSum,MaxSum,i; ThisSum=MaxSum=0; for(i=0;i<N;i++) { ThisSum=ThisSum+A[i]; if(ThisSum>MaxSum) MaxSum=ThisSum;//发现更大和的时候进行更新 else if(ThisSum<0) ThisSum=0;//如果当前和为负数,不可能让后面的部分和增大,所以舍弃。 } return MaxSum; }