2021-01-19

数据结构

算法:在线处理
解决问题:最大子列和问题
问题描述:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值