题目
- 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值 。

法一、暴力枚举
- 遍历数组,获取每个窗口的子数组,找到当前窗口的最大值并加入结果数组
var maxSlidingWindow = function(nums, k) {
let res = [];
for (let i = 0; i <= nums.length - k; i++) {
let window = nums.slice(i, i + k);
let maxVal = Math.max(...window);
res.push(maxVal);
}
return res;
};
法二、双端队列
- 思路:挨个遍历数组,用一个双端队列往对列右边加入,如果对列中存在比当前元素小的就左边弹出,如果超过了滑动窗口的范围也缩小左边 ,每到滑动窗口的大小时就将最大值(第一个元素)放进结果数组。
var maxSlidingWindow = function(nums, k) {
let res = [];
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);
if (i >= k - 1) {
res.push(nums[deque[0]]);
}
}
return res;
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2023-10-30 141. 环形链表
2023-10-30 234.回文链表
2023-10-30 21. 合并两个有序链表