滑动窗口的最大值(双端队列,单调队列)

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

滑动窗口的最大值(双端队列,单调队列)_第1张图片

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        LinkedList 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();查看队尾元素

你可能感兴趣的:(算法,leetcode,数据结构)