给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。
输入格式:
输入第1行给出正整数 K (<= 100000);第2行给出K个整数,其间以空格分隔。
输出格式:
在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。
输入样例:
6
-2 11 -4 13 -5 -2
输出样例:
20
程序:
1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStreamReader; 4 5 public class Main { 6 public static void main(String[] args) throws IOException { 7 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 8 String s1 = bf.readLine(); 9 String s2 = bf.readLine();10 int K = Integer.parseInt(s1);11 String[] s3 = s2.split(" ");12 int[] a = new int[K];13 for (int i = 0; i < a.length; i++) {14 a[i] = Integer.parseInt(s3[i]);15 }16 int ThisSum = 0, MaxSum = 0;17 for (int i = 0; i < K; i++) {18 ThisSum += a[i];19 if (ThisSum > MaxSum)20 MaxSum = ThisSum;21 else if (ThisSum < 0)22 ThisSum = 0;23 }24 System.out.println(MaxSum);25 }26 }
评测结果:
测试点: