仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 嵌入式

  • Android

  • 编辑器

  • 产品&设计

  • 测试

  • 虚拟机

  • 算法

    • 最长公共前缀
    • 盛最多水的容器
    • 三数之和
    • 最长公共前缀
    • 合并两个有序链表
    • 接雨水
    • 字母异位词分组
    • 爬楼梯
    • 柱状图中最大的矩形
    • 滑动窗口最大值
      • 题目
      • 题解
    • 有效的字母异位词
    • 移动零
    • 宝石与石头
    • IP 地址无效化
    • 分割平衡字符串
    • 拥有最多糖果的孩子
    • 重新排列数组
    • 数组异或操作
    • 好数对的数目
    • 设计停车系统
    • 最富有客户的资产总量
    • 比赛中的配对次数
    • 解码异或后的数组
    • 查找每个员工花费的总时间
    • 差的绝对值为-k-的数对数目
    • 执行操作后的变量值
    • 句子中的最多单词数
    • 拆分数位后四位数字的最小和
    • excel-表中某个范围内的单元格
    • 第一个出现两次的字母
    • 算术三元组的数目
    • 矩阵中的局部最大值
  • 网络

  • 安全

  • Nas

  • 硬件

  • CDCI

  • 破解

  • 建筑

  • clash-rule最佳配置
  • Untitled
  • 其他技术
  • 算法
仲灏
2025-04-02
目录

滑动窗口最大值

# 题目

239. 滑动窗口最大值 (opens new window)

困难

相关标签

相关企业

提示

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

返回 滑动窗口中的最大值 。

示例 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
1
2
3
4
5
6
7
8
9
10
11

示例 2:

输入:nums = [1], k = 1
输出:[1]
1
2

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104
  • 1 <= k <= nums.length

# 题解

  • 暴力求解
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number[]}
 */
var maxSlidingWindow = function (nums, k) {
    let s = 0;
    let e = s + k - 1;
    const maxArr = []
    for (let s = 0; e < nums.length; s++, e++) {
        let max = nums[s];
        for (let i = 0; i < k; i++) {
            max = Math.max(nums[s+i], max)
        }
        maxArr.push(max)
    }
    return maxArr
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • 栈
var maxSlidingWindow = function (nums, k) {
    const ans = []
    const stack = []

    for (let i = 0; i < nums.length; i++) {
        // in
        while (stack.length && nums[stack[stack.length - 1]] <= nums[i]) {
            stack.pop()
        }
        stack.push(i)
        // out
        if (i - stack[0] >= k) {
            stack.shift()
        }
        // record
        if (i > k-2) {
            ans.push(nums[stack[0]])
        }
    }
    return ans
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
上次更新: 2024/04/08, 16:26:17
柱状图中最大的矩形
有效的字母异位词

← 柱状图中最大的矩形 有效的字母异位词→

最近更新
01
vim日常使用记录
04-02
02
有效的字母异位词
04-02
03
接雨水
04-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式