题目
思路
- 维护窗口,向右移动时左侧超出窗口的值弹出,因为需要的是窗口内的最大值,所以只要保证窗口内的值是递减的即可,小于新加入的值全部弹出。最左端即为窗口最大值
代码
滑动窗口最大值public int[] maxSlidingWindow(int[] nums, int k) {if (nums.length <= 1 || k == 1) return nums;LinkedList<Integer> queue = new LinkedList<>();int[] res = new int[nums.length - k + 1];for (int i = 0; i < nums.length; i++) {while (!queue.isEmpty() && nums[queue.getLast()] <= nums[i]) {queue.removeLast();}queue.addLast(i);if (queue.peek() <= i - k) {queue.removeFirst();}if (i - k + 1 >= 0) {res[i - k + 1] = nums[queue.peek()];}}return res;}
