最大子数组和

来源:互联网 发布:淘宝网舞蹈水袖 编辑:程序博客网 时间:2024/04/28 15:32

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


0 0