leetcode 239. Sliding Window Maximum | 239. 滑动窗口最大值(单调栈,窗口内最大最小值更新结构)

x33g5p2x  于2021-11-12 转载在 其他  
字(0.7k)|赞(0)|评价(0)|浏览(400)

题目

https://leetcode.com/problems/sliding-window-maximum/

题解

窗口内最大最小值更新结构,单调栈问题,左神视频讲过,《程序员算法面试指南》也有此题目。

本题的关键在于利用双端队列来实现窗口最大值的更新。

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        Deque<Integer> valueQueue = new LinkedList<>();
        Deque<Integer> indexQueue = new LinkedList<>();
        int[] result = new int[nums.length - k + 1];
        for (int i = 0; i < nums.length; i++) {
            if (!indexQueue.isEmpty() && indexQueue.peekFirst() <= i - k) {
                valueQueue.pollFirst();
                indexQueue.pollFirst();
            }
            while (!valueQueue.isEmpty() && valueQueue.peekLast() < nums[i]) {
                valueQueue.pollLast();
                indexQueue.pollLast();
            }
            valueQueue.offer(nums[i]);
            indexQueue.offer(i);
            if (i - k + 1 >= 0) result[i - k + 1] = valueQueue.peekFirst();
        }
        return result;
    }
}

相关文章