力扣(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();查看队尾元素