牛客之連續最大和

題目描述:一個數組有 N 個元素,求連續子數組的最大和。 例如:[-1,2,1],和最大的連續子數組爲[2,1],其和爲 3。
分析:從頭到尾遍歷數組,如果加和小於0,說明之前的累加和並不能夠構成最大和數組,所以我們從數組的下一個元素開始累加,但累加的過程中有可能已經遇到了最大和,所以噹噹前的和比之前的大時記錄下來。
踩坑點:當加和小於0時只需要從下個位置作爲數組頭開始累加即可,因爲之前已構不成最大數組,所以不需要從之前沒有作爲數組頭的地方繼續便利了。

#include<iostream>
using namespace std;
#include<vector>
int main()
{
    int max = 0;
    int Max = 0x80000000;
    int num = 0;
    int n = 0;
    vector<int> v;
    while (cin >> n)
    {
        int i = 0;

        for (i = 0; i<n; i++){
            cin >> num;
            v.push_back(num);
        }
        for (i = 0; i<n; i++){
            if (max <= 0){
                max = v[i];
            }
            else{
                max += v[i];
            }
            if (max > Max){
                Max = max;
            }
        }
        cout << Max << endl;
        v.clear();
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章