01-复杂度1 最大子列和问题

01-复杂度1 最大子列和问题

题意:给出一组数,求最大连续子序列和。
连续子序列和:几个连续数的和。

思路:一个序列加正数序列和会增大,负数则会减小。所以如果我们每次都增加正数,那这个序列和将会最大。设置一个max值,记录当前情况下最大的序列和。我们把已经添加的所有序列当作一个数,向后不断遍历。遇到正数就加上,遇到负数也加上,不过要判断一下加上这个负数之后的和是否为负数。如果为负数,就舍弃,因为我们把遍历过的序列当作一个数,现在这个数已经是一个负值,对后面的数不会再有贡献,从零开始继续往后遍历。遍历过程中不断比较max值,遇到更大的更新max值,最后max即为最大子序列和。

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,x[100007],sum=0,temp=0;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",x+i);
    }
    for(int i=0;i<n;i++){
        temp+=x[i];
        if(temp<0){
            temp=0;
        }
        sum=max(sum,temp);
    }
    printf("%d\n",sum);
    return 0;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页