求解最大子列和问题:在线处理算法
在线处理算法,初次接触难以想象居然有这么吊的,原本自己的就是第2个傻了吧唧的时间复杂度为O(n^2)的蠢算法,刚看到分而治之的思想已经觉得它极端巧妙,毕竟从O(n^2) 减少到了O(n log n ),而且其中的算法思想也是之前所不具备的,其中甚至还有一个在线处理算法,居然将时间复杂度降低到了O(n),这个就已经很叼了,毕竟这已经是能想象的最快算法了,毕竟无论怎么说也需要将n个数据一个个读完的,并且它能够随时得到该子列的最大子列和。
即就算改变了该子列,它也能得到正确结果,下面附上代码:
#include<stdio.h>
int main()
{
int array[] = {-1,6,-5,4,3,5,-9,-6,7,-6,-5,-4,6,8,9,3}, i;
int thissum = 0, maxsum = 0;
for(i = 0; i < 16; i++){
if(thissum < 0)
thissum = 0;
thissum += array[i];
if(thissum > maxsum)
maxsum = thissum;
}
printf("maxsum = %d", maxsum);
return 0;
}
array[]可以自己定义哈;