public int[] maxSlidingWindow(int[] nums, int k) {// 改为大顶堆PriorityQueue<int[]> queue = new PriorityQueue<>(k, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o2[0] - o1[0];}});int[] ans = new int[nums.length - k + 1];for (int i = 0; i < k; i++) {// queue's element 0:值 1:值对应的索引queue.offer(new int[]{nums[i], i});}ans[0] = queue.peek()[0];for (int i = k; i < nums.length; i++) {queue.offer(new int[]{nums[i], i});// 索引值while (queue.peek()[1] <= i - k) {// 最大顶堆值不在滑动窗口内queue.poll();}ans[i - k + 1] = queue.peek()[0];}return ans;}
public int[] maxSlidingWindow(int[] nums, int k) {int n = nums.length;if (n == 0) {return nums;}// 队列存索引值Deque<Integer> deque = new LinkedList();int[] ans = new int[n - k + 1];for (int i = 0; i < n; i++) {// i-k+1 滑动窗口起始索引值if (!deque.isEmpty() && deque.peek() < i - k + 1) {deque.poll();}// nums[i]比队列中的元素都大while (!deque.isEmpty() && nums[i] >= nums[deque.peekLast()]) {deque.pollLast();}deque.offer(i);// i-k+1>=0 读完滑动窗口所有值if (i - k + 1 >= 0) {ans[i - k + 1] = nums[deque.peek()];}}return ans;}
