还不会做最大子段和?
一次由 Scanner(System.in) 引起的 TLE)。
import java.io.*;
import java.util.*;
public class Main {
public static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public static int nextInt() throws IOException {
in.nextToken();
return (int)in.nval;
}
public static void main(String[] args) throws IOException {
int n = nextInt();// 快速读数据
int sum = 0; // 记录当前前缀和
int max = Integer.MIN_VALUE; // 记录最大子段和
int min = 0; // 记录当前位置之前最小前缀和
for (int i = 0; i < n; ++i) {// 读取数据同时计算前缀和
sum += nextInt(); // 读取数据同时计算当前前缀和
max = Math.max(max, sum-min); // 当前最大子段和等于当前前缀和减去最小前缀和
min = Math.min(min, sum); // 计算最小前缀和
}
System.out.println(max);
}
}
import java.io.*;
import java.util.*;
public class Main {
public static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public static int nextInt() throws IOException {
in.nextToken();
return (int)in.nval;
}
public static void main(String[] args) throws IOException {
int n = nextInt();// 快速读数据
int sum = 0; // 记录当前前缀和
int max = Integer.MIN_VALUE; // 记录最大子段和
int min = 0; // 记录当前位置之前最小前缀和
for (int i = 0; i < n; ++i) {// 读取数据同时计算前缀和
sum += nextInt(); // 读取数据同时计算当前前缀和
max = Math.max(max, sum-min); // 当前最大子段和等于当前前缀和减去最小前缀和
min = Math.min(min, sum); // 计算最小前缀和
}
System.out.println(max);
}
}