最大连续子段和

最大连续子段和

思路:

用两个变量 一个存放累计最大值 一个存放当前和 如果当前和小于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; 
}
全部评论

相关推荐

昨天 16:00
门头沟学院 Java
点赞 评论 收藏
分享
05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 15:39
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务