暴力遍历可以解决这个问题,把所有情况遍历一遍,取最大值,但是如果要把时间复杂度控制在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;
}