在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6
-2 11 -4 13 -5 -2
输出样例:
20
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int K;
cin>>K;
int *a=new int [K];
for(int i=0;i<K;i++)
cin>>a[i];
int maxnum=0;
int sum;
for(int i=0;i<K;i++){
sum+=a[i]; //向右累加
if(sum<0) sum=0; //如果当前子列和为负,不可能使后面的部分和增大,舍去
maxnum=max(sum,maxnum); //更新最大值
}
cout<<maxnum<<endl;
delete []a;
}
时间复杂度为O(n)