算法题《二》给定一个整形数组arr,和一个整数num某个arr中的子数组sub,如果想达标,必须满足:sub中最大值-sub中最小值<= num,求返回arr中达标数组的数量
代码如下
` public static int reiget(int []arr ,int num){
int count = 0;
if (arr == null|| arr.length<=0){
return 0;
}
LinkedList<Integer> xmin = new LinkedList<>();
LinkedList<Integer> xmax = new LinkedList<>();
int L = 0,R=0;
while (L<arr.length){
while (!xmin.isEmpty() && arr[xmin.peekLast()] >= arr[R]){
xmin.pollLast();
}
xmin.addLast(R);
while (!xmax.isEmpty() && arr[xmax.peekLast()]<= arr[R]){
xmax.pollLast();
}
xmax.addLast(R);
if (arr[xmax.getFirst()] - arr[xmin.getFirst()] > num){
break;
}
R++;
}
count += R - L;
if (xmin.peekFirst()==L){
xmin.pollFirst();
}
if (xmax.peekFirst()== L){
xmax.pollFirst();
}
L ++;
return count;
}`
## **如果有看不懂的地方或者不对的地方请留言!!!**