最大连续子序列
实际上就是和最大的子串
思路:
当添加第i个元素时,判断前面的和是否大于0,如果小于0,则左边界移到
i
+
1
i+1
i+1,大于0就可以直接添上。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n;
int main()
{
while(cin>>n)
{
if(n == 0) break;
for(int i = 0 ; i < n ; i ++ ) cin>>a[i];
int ans = -1,tmp = 0;
int l=0,r=0,x=0;
for(int i = 0 ; i < n ; i ++ )
{
tmp += a[i];
if(tmp < 0)
{
tmp = 0;
x = i+1;
}
else if(tmp > ans)
{
ans = tmp;
l = x;
r = i;
}
}
if(ans<0) cout<<0<<" "<<a[0]<<" "<<a[n-1]<<"\n";
else cout<<ans<<" "<<a[l]<<" "<<a[r]<<"\n";
}
return 0;
}