美文网首页
292. 滑动窗口最大值

292. 滑动窗口最大值

作者: Jason_Shu | 来源:发表于2018-12-24 18:12 被阅读0次

题目链接:https://leetcode-cn.com/problems/sliding-window-maximum

思路:我们可以用一个「双端队列」,有一个数组window来记录元素「下标」,遍历数组,宗旨就是在每次窗口滑动后,window的第一个元素记录着当前窗口最大元素的「下标」。首先,如果window中第一个元素记录的下标出了窗口的「左边界」,就把window的第一个元素移出。窗口中新进一个元素:

  • 如果「新元素」比window中队尾元素的对应的值小,则直接把该「新元素」的下标放入window
  • 如果「新元素」比window中队尾元素的对应的值大,则从「队尾」遍历,把比「新元素」小的元素的「下标」从window中移出。
  • 上述操作就是为了保证每次窗口中,window的第一个元素对应的数值就是最大的。

代码:

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var maxSlidingWindow = function(nums, k) {
    if( nums.length === 0 ) return [];
    let window = [];    // 用于存储nums数组下标
    let result = [];    // 用于输出结果
    for(let i = 0; i < nums.length; i++) {
        if(i >= k && window[0] <= i - k) window.shift();

        while(window && nums[window[window.length - 1]] <= nums[i]) {
            // 一直从队列尾部开始遍历,如果比当前新进元素小,则移出队列
            window.pop();
        }

        window.push(i);

        if(i >= k - 1) {
            result.push(nums[window[0]]);
        }
    }
    return result;
};

相关文章

  • 292. 滑动窗口最大值

    题目链接:https://leetcode-cn.com/problems/sliding-window-maxi...

  • 队列的最大值

    滑动窗口的最大值给定一个数组和滑动窗口的最大值,找出所有滑动窗口里的最大值。例如输入[2, 3, 4, 2, 6,...

  • 剑指offer | 滑动窗口的最大值

    滑动窗口的最大值 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值 示例输入:{2, 3, 4, 2, ...

  • 59-滑动窗口最大值、队列的最大值

    1. 滑动窗口的最大值 给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。 示例:输入:...

  • JZ-064-滑动窗口的最大值

    滑动窗口的最大值 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,...

  • 剑指Offer66题

    1、滑动窗口的最大值 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4...

  • 面试题59(剑指offer)--队列的最大值

    题目一: 滑动窗口的最大值。给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3...

  • 剑指Offer Java版 面试题59:队列的最大值

    题目一:滑动窗口的最大值。给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3...

  • 面试题59:队列的最大值

    题目 滑动窗口的最大值给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,...

  • 栈和队列

    剑指offer所有的题目总结 牛客 滑动窗口的最大值 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值...

网友评论

      本文标题:292. 滑动窗口最大值

      本文链接:https://www.haomeiwen.com/subject/tyozkqtx.html