力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
LinkedList<Integer> deque = new LinkedList<>();//双端队列,存储单调队列的下标
int ans[] = new int[nums.length-k+1];
for (int i = 0,j=0; i < nums.length; i++) {
if (!deque.isEmpty() && i - deque.peekFirst() >= k) deque.pollFirst();//判断是否需要出队
while(!deque.isEmpty() && nums[deque.peekLast()] < nums[i]) deque.pollLast();
deque.offerLast(i);
if(i>=k-1)ans[j++]=nums[deque.peekFirst()];
}
return ans;
}
}
对于Linkedlist的一些补充(作为双端队列):
pollFirst();返回头部元素并删除
pollLast();返回尾部元素并删除
offerFirst();在头部添加元素
offerLast();在尾部添加元素
peekFirst();查看队头元素
peekLast();查看队尾元素