最大连续子段和

最大连续子段和

思路:

用两个变量 一个存放累计最大值 一个存放当前和 如果当前和小于0 则在这之前的数都pass掉 给当前和重新赋值
时间复杂度O(n)

code:

#include<iostream>
#include<cmath>
using namespace std;
const int N=2e5+5;
int n;
int a[N];
int maxs=-99999,thissum;//最大值与当前和
void getmax()
{
    maxs=a[1];//最大值默认为第一个元素的值
    thissum=a[1];//当前和也默认为第一个元素的值
    for(int i=2;i<=n;i++)
    {
        thissum+=a[i];//当前和 累加
        if(thissum<0) thissum=a[i];//如果当前和小于0 则放弃当前和
        maxs=max(maxs,thissum);//判断最大值是否改变
    }    
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    getmax();
    cout<<maxs<<endl;
    return 0; 
}
全部评论

相关推荐

无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务