滑动窗口最大值:单调队列(Monotonic Queue)一遍扫描 ACERS 解析

副标题 / 摘要 滑动窗口最大值是“滑动窗口 + 单调队列”的经典组合题。本文按 ACERS 模板拆解思路,给出可复用的工程做法与多语言实现。 预计阅读时长:12~15 分钟 标签:滑动窗口、单调队列、数组 SEO 关键词:Sliding Window Maximum, 滑动窗口最大值, 单调队列, deque, O(n) 元描述:滑动窗口最大值的单调队列解法与工程应用,含复杂度分析与多语言代码。 目标读者 正在刷 LeetCode / Hot100 的同学 想建立“滑动窗口 + 单调队列”模板的中级开发者 做实时监控、日志分析、风控的工程师 背景 / 动机 连续窗口的最大值在工程里非常常见: 延迟监控、价格波动、温度报警、在线指标平滑等都需要“窗口最大值”。 暴力做法每次窗口重算最大值是 O(nk),当 n 很大时会不可接受。 单调队列能把复杂度降到 O(n),是最工程可行的方案之一。 核心概念 滑动窗口:固定长度 k 的连续区间 单调队列:队列中元素按值单调递减,队首永远是当前最大值 索引维护:用索引判断元素是否过期(离开窗口) A — Algorithm(题目与算法) 题目还原 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组最左侧移动到最右侧。 你只能看到窗口内的 k 个数字,窗口每次右移一位。 返回每个窗口中的最大值。 输入输出 名称 类型 描述 nums int[] 整数数组 k int 窗口大小 返回 int[] 每个窗口的最大值 示例 1 nums = [1,3,-1,-3,5,3,6,7], k = 3 输出 = [3,3,5,5,6,7] 示例 2 nums = [1], k = 1 输出 = [1] C — Concepts(核心思想) 方法类型 滑动窗口 + 单调队列(Monotonic Queue)。 ...

2026年1月18日 · 6 分钟 · map[name:Jeanphilo]