优化思路:
对于一个每次都增加1个长度的子区间,求这个区间内的最大值和最小值,只需要比较每次多的那个元素的值即可。
import java.util.*;
import java.io.*;
import java.math.*;
class Main {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] sp;
int[] arr = new int[10010];
int n;
void run() throws Exception {
sp = reader.readLine().split(" ");
int n = Integer.valueOf(sp[0]);
sp = reader.readLine().split(" ");
for (int i = 0; i < n; i++) {
arr[i] = Integer.valueOf(sp[i]);
}
int cnt = 0;
// 判断一个区间是否是连号区间:该区间内的最大值-最小值+1 == 区间长度
for (int l = 0; l < n; l++) {
int max = -Integer.MAX_VALUE, min = Integer.MAX_VALUE;
for (int r = l; r < n; r++) {
max = Math.max(max, arr[r]);
min = Math.min(min, arr[r]);
if (max - min == r - l) cnt++;
}
}
System.out.println(cnt);
}
public static void main(String[] args) throws Exception {
new Main().run();
}
}