看到这道题,首先的思路一定是两个循环嵌套。但是,这样做必定超时
这是一道典型的单调队列的题。
思路:
①就是一定保持队列的对头一定是最大值
②队列是单调递减的
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums.length==0 || k==0) return new int[0];
int []res=new int[nums.length-k+1];
Deque<Integer> deque=new LinkedList<>();
for(int j=0,i=1-k;j<nums.length;i++,j++){
if(i>0 && deque.peekFirst()==nums[i-1]) deque.removeFirst();
while(!deque.isEmpty() && deque.peekLast()<nums[j]){
deque.removeLast();}
deque.addLast(nums[j]);
if(i>=0){
res[i]=deque.peekFirst();
}
}
return res;
}
}