原题链接
一个子序列如果小于0,那么它不管怎么与后面相加,目前这个子序列都会减少后续子序列的和,如果掌握这一点,下面的代码不难理解。
这道题最终的就是争取时间复杂度为O(n),否则可能会超时,所以我们选择边输入边相加的方式来完成到这题。
#include <stdio.h>
int main(){
int k,i,j,sum=0,now=0,a;
scanf("%d",&k);
for(i=0;i<k;i++){
scanf("%d",&a);
now+=a;
if(sum<now){
sum=now;
}
if(now<0){
now=0;
}
}
printf("%d",sum);
}