文章目录
滑动窗口最大值
示例 1:
输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置 最大值
--------------- -----
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
示例 2:
输入:nums = [1], k = 1
输出:[1]
我的思路
var maxSlidingWindow = function (nums, k) {
let result = [];
for (let i = 0; i <= nums.length - k; i++) {
let max = nums[i];
for (let j = 1; j < k; j++) {
if (nums[i + j] > max) {
max = nums[i + j];
}
}
result.push(max);
}
return result;
};
网上思路
var maxSlidingWindow = function (nums, k) {
let result = [];
let deque = []; // 用于存储索引
for (let i = 0; i < nums.length; i++) {
// 移除不在窗口内的元素
if (deque.length && deque[0] < i - k + 1) {
deque.shift();
}
// 移除小于当前元素的索引
while (deque.length && nums[deque[deque.length - 1]] < nums[i]) {
deque.pop();
}
// 添加当前元素的索引
deque.push(i);
// 当窗口达到大小 k 时,记录当前窗口的最大值
if (i >= k - 1) {
result.push(nums[deque[0]]);
}
}
return result;
};
总结
滑动窗口这一块,回头需要好好学习一下,真的没怎么搞懂。。。