题解 | #滑动窗口的最大值#
滑动窗口的最大值
https://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
import java.util.*;
public class Solution {
//这里重写一个比较器 实现降序排列
public class CustomComparator implements Comparator<Integer> {
@Override
public int compare(Integer number1, Integer number2) {
int value = number1.compareTo(number2);
//元素以相反的顺序排序
if (value > 0) {
return -1;
} else if (value < 0) {
return 1;
} else {
return 0;
}
}
}
public ArrayList<Integer> maxInWindows (int[] num, int size) {
// 如果输入的size为0的时候 就需要返回一个空ArrayList
if(size==0){
ArrayList<Integer> arr0=new ArrayList<>();
return arr0;
}
//定义一个新的数组arr 这里存的是每次窗口滑动时的最大值
//利用数学 求出arr需要length-size+1个空间
Integer[] arr = new Integer[num.length - size + 1];
for (int i = 0; i < num.length - size + 1; i++) {
//创建大根堆
PriorityQueue<Integer> p1 = new PriorityQueue<>(new CustomComparator());
for (int j = 0; j < size; j++) {
//把从i~i+size的值加入到大根堆中
p1.add(num[i + j]);
}
//只取出顶点就是大根堆中最大的值(即所滑动的窗口的最大值)
arr[i] = p1.peek();
}
ArrayList<Integer> newArr = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
//把arr数组转化到ArrayList的数组中
newArr.add(arr[i]);
}
return newArr;
}
}

