求最大子數組和

當sum<0時,對於後面的子數組求和是讓它變小的累贅,此時更新sum=0,重新計算

當sum>0時,讓sum與maxa比較

#include <iostream>
#include<vector>
#include<stdio.h>
using namespace std;
int main()
{
    char c=0;
    vector<int> a;
    int i=0,k,sum,maxa,b;
    while(~scanf("%d",&b)){
        a.push_back(b);
        i++;
    }
    k=i-1;
    sum=maxa=0;
    for(i=0;i<=k;i++){
        sum+=a[i];
        if(sum<0)               //小於0,拖累,丟棄
            sum=0;              //相當於設置起點
        if(sum>maxa)
            maxa=sum;
    }
    printf("%d\n",maxa);
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章