“在线”的意思是指每输入一个数据就进行及时处理,得到结果是对于当前已经读入的所有数据都成立的解,即在任何一个地方中止输入,算法都能正确给出当前的解。
上一篇文章给出的三种算法都必须等所有的N个整数都读入并存储后才可以进行,而下面的算法无需存储输入序列就可以得到任何时刻的最大子列和。
int MaxSubseqSum4(int List, int N)
{
int i;
int ThisSum,MaxSum;
ThisSum=MaxSum=0;
for(i=0;i<N;i++){
ThisSum+=List[i];
if(ThisSum>MaxSum)
MaxSum=ThisSum;
else if(ThisSum<0)
ThisSum=0;
}
return MaxSum;
}
易见该算法只有一个for循环,复杂度只有O(N)
不同的算法会有很大的差别哦,要好好思考,找出更优解。