class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
Deque<Integer> deque = new ArrayDeque<>();
int len = nums.length;
int[] result = new int[len - k + 1];
int index = 0;
for (int i = 0;i < len;i++) {
//在遍历到大于等于k的地方判断是否需要poll掉开头的元素
if (i >= k && deque.peek() == nums[i - k]) {
deque.poll();
}
//每次添加元素到deque之前,将队列尾部小于nums[i]的都poll掉,以保证单调递减的队列
while (!deque.isEmpty() && nums[i] > deque.peekLast()) {
deque.pollLast();
}
deque.add(nums[i]);
//当i>=k-1时,取出单调队列头部的值作为返回值
if (i >= (k -1)) {
result[index++] = deque.peek();
}
}
return result;
}
}