题解:
import java.util.LinkedList;
public class Code_滑动窗口应用 {
public static int num(int[] arr, int sum) {
int N = arr.length;
LinkedList<Integer> qmax = new LinkedList<>();
LinkedList<Integer> qmin = new LinkedList<>();
int count = 0;
int R = 0;
for (int L = 0; L < N; L++) {
while (R < N) {
while (!qmax.isEmpty() && arr[qmax.peekLast()] <= arr[R]) {
qmax.pollLast();
}
qmax.addLast(R);
while (!qmin.isEmpty() && arr[qmin.peekLast()] >= arr[R]) {
qmin.pollLast();
}
qmin.addLast(R);
if (arr[qmax.peekFirst()] - arr[qmin.peekFirst()] > sum) {
break;
} else {
R++;
}
}
count += R - L;
if (qmax.peekFirst() == L) {
qmax.pollFirst();
}
if (qmin.peekFirst() == L) {
qmin.pollFirst();
}
}
return count;
}
public static void main(String[] args) {
int[] arr = {7,6,2,0};
int sum = 5;
int num = num(arr, sum);
}
}