牛客之连续最大和

题目描述:一个数组有 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章