publicclassSlidingWindowMaximum { publicstaticint[] maxSlidingWindow(int[] nums, int k) { if (nums == null || k < 1 || nums.length < k) { returnnull; }
LinkedList<Integer> maxQueue = newLinkedList<>(); // 共有 arr.length - k + 1 个窗口, 即共有arr.length - win + 1个最大值 int[] result = newint[nums.length - k + 1]; intindex=0;
// 用 i 表示 R for (inti=0; i < nums.length; i++) { while (!maxQueue.isEmpty() && nums[maxQueue.peekLast()] <= nums[i]) { maxQueue.pollLast(); } maxQueue.addLast(i);
// i - k 为过期的索引, 即窗口的 L 已越过该位置, 需弹出头结点维持窗口大小为 k if (maxQueue.peekFirst() == i - k) { System.out.println(i + " " + k); maxQueue.pollFirst(); } if (i >= k - 1) { result[index++] = nums[maxQueue.peekFirst()]; } }