分析:
- 如果使用两个for循环遍历所有情况,运行会超时
- 解决运行超时的关键点在于:及时停止累加,丢弃当前的子序列
- 比如【1,-2,3,10】
- 从第一个数字开始的子序列的和小于从第三个数字开始的子序列的和
- 因为第一到第二的和 sum<0,sum+3<3,所以丢弃这个只会带来负作用的子序列,重新开始
package no1_1;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(reader.readLine());
String[] s=reader.readLine().split(" ");
int[] number=new int[n];
for(int i=0;i<n;i++) {
number[i]=Integer.parseInt(s[i]);
}
int max=Integer.MIN_VALUE;
for(int i=0;i<n-1;i++) {
int sum=0;
for(int j=i;j<n;j++) {
if(sum<0) {//前面累加的和sum小于0时,丢弃该组序列,因为sum<0时,sum+number[i]<number[i]
break;
}else {
sum+=number[j];
max=Math.max(max, sum);
}
}
}
System.out.println(max);
}
}