题目
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。
例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};
针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:
{[2,3,4],2,6,2,5,1},
{2,[3,4,2],6,2,5,1},
{2,3,[4,2,6],2,5,1},
{2,3,4,[2,6,2],5,1},
{2,3,4,2,[6,2,5],1},
{2,3,4,2,6,[2,5,1]}。
leetcode链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/
思路
- 单调队列


/**
* @param {number[]} nums
* @param {number} k
* @return {number[]}
*/
var maxSlidingWindow = function (nums, k) {
const maxs = []
const result = []
for (let i = 0; i < nums.length; i++) {
while (maxs.length && nums[i] > nums[maxs[maxs.length - 1]]) {
maxs.pop()
}
maxs.push(i)
if (maxs[0] < i - k + 1) {
maxs.shift()
}
if (i >= k - 1) {
result.push(nums[maxs[0]])
}
}
return result
}

博客围绕给定数组和滑动窗口大小,求所有滑动窗口里数值最大值的问题展开。以数组{2,3,4,2,6,2,5,1}、窗口大小3为例,展示了6个滑动窗口及其最大值。还给出了leetcode链接,并提出使用单调队列解决该问题的思路。

2万+

被折叠的 条评论
为什么被折叠?



