最大连续子段和
最大连续子段和
思路:
用两个变量 一个存放累计最大值 一个存放当前和 如果当前和小于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;
}