classSolution { publicint[] maxSlidingWindow(int[] nums, int k) { if (nums == null || k <= 0) returnnewint[0]; int[] res = newint[nums.length - k + 1];//保存结果 ArrayDeque<Integer> deque = newArrayDeque<Integer>();//双端队列
intindex=0; for (inti=0; i < nums.length; i++){ while (!deque.isEmpty() && deque.peek() < i - k + 1){//越界 deque.poll(); }
while (!deque.isEmpty() && nums[deque.peekLast()] < nums[i]){ deque.pollLast();//从右向左剔除,确保最左是当前窗口最大值 }
deque.offer(i);//存放的是位置索引
if (i >= k - 1){ res[index++] = nums[deque.peek()]; } } return res; } }
下面是Python的代码:
classSolution: defmaxSlidingWindow(self, nums: List[int], k: int) -> List[int]: ifnot nums: return [] window , res = [], [] for i, x inenumerate(nums): if i >= k and window[0] <= i - k: window.pop(0) while window and nums[window[-1]] <= x: window.pop() window.append(i) if i >= k -1: res.append(nums[window[0]]) return res