例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。
第2 - N + 1行:N个整数(-10^9 <= A i i <= 10^9)
6 -2 11 -4 13 -5 -2
20
分析:这个题思路很简单,就是依次将各个数累加,如果结果大于等于0继续加,如果小于0则重新置零开始累加,那么这样求得的和一定是最大的,道理不用解释了吧,只有大于零的数继续累加才会对最大值产生增益的效果,上代码:
import java.util.*;
public class Main {
static Scanner in = new Scanner(System.in);
static int[] a = new int[50005];
static int n;
public static void main(String[] args) {
while(in.hasNext()){
n = in.nextInt();
for(int i=1;i<=n;i++)
a[i]=in.nextInt();
long ans=0,sum=0;//由于结果可能会超过整数最大范围
for (int i=1;i<=n;i++) {
if(sum>0)
sum+=a[i]; //大于0累加
else
sum=a[i]; //否则还是原来的数,这个条件会把小于0的数筛去
ans = Math.max(sum, ans);
}
System.out.println(ans);
}
}
}
第一次没有AC就是没注意到结果可能会超范围。。,这个错误希望不要再犯了。