数据结构
算法:在线处理
解决问题:最大子列和问题
问题描述:
https://share.weiyun.com/M8air5qz
在解决此问题时,考虑到时间问题,在线处理则是解决该问题最快的方法。
代码:
#include<stdio.h>
int sum(int n, int num[])
{
int thissum=0,maxsum=0;
int i;
for(i=0;i<n;i++)
{
thissum+=num[i]; //向右累加
if(thissum>maxsum)
maxsum=thissum; //发现更大时则更新当前结果
if(thissum<0)//如果当前子列和为负
thissum=0;//如果继续相加则不可能使 后面的部分和增大,所以舍弃,从下一个开始
}
return maxsum;
}
int main()
{
int i;
int num[100000]={0};
int n=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&num[i]);
printf("%d",sum(n,num));
return 0;
}
例如,取n=4,依次为-1,3,-2,4
从-1开始,当thissum=-1时,thissum不大于maxsum,不做替换;判断<0,舍去;
进入下一项thissum=3,替换maxsum,maxsum=3
当thissum=-2时,-2+3=1<3,因此maxsum不做替换,但1>0,保留;
当thissum=4时,1+4=5;而有maxsum=3<5,所以maxsum=5;
结果:
https://share.weiyun.com/YPDh8NIn