您的位置:首页 > 其它

最大子数组和

2015-09-14 15:04 190 查看
暴力遍历可以解决这个问题,把所有情况遍历一遍,取最大值,但是如果要把时间复杂度控制在O(n),

1.cursum<=0 ,就把cursum的值清零

2.cursum>0,把cursum =cursum + a[i]

3.得打cursum的值再与sum的值比较,如果cursum大,则赋值给sum

4.最后得到最大子数组和sum

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>

#define NUM 8
int main()
{
int sum,cursum;
int a[NUM];

for(int i=0;i<NUM;i++)
{
scanf("%d",&a[i]);
}
sum = 0;
//cursum = a[0];
//if(cursum) sum=cursum;
cursum = 0;
for(int i=0;i<NUM;i++)
{
if(cursum<=0)
cursum = a[i];
else
{
cursum = cursum+a[i];
}
if(cursum>sum) sum=cursum;
}
printf("%d",sum);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: