码迷,mamicode.com
首页 > 其他好文 > 详细

连续最大和

时间:2019-11-13 19:28:35      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:out   vector   stream   end   地方   iostream   turn   strong   最大的   

题目描述:一个数组有 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;
}

连续最大和

标签:out   vector   stream   end   地方   iostream   turn   strong   最大的   

原文地址:https://blog.51cto.com/14239789/2449982

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!