当前位置:首页数据结构 > 正文

单调队列模拟

作者:野牛程序员:2025-05-02 09:03:16数据结构阅读 2188
单调队列模拟

? 目标:用单调递减队列滑动窗口最大值


? 问题:

数组:[4, 2, 12, 3, 8, 7]
窗口大小:3


? 模拟过程开始!

初始状态:

队列为空,窗口准备从左往右滑。


? 第一步:i = 0,数值 = 4

队列空,直接放进去。
队列:[4]


? 第二步:i = 1,数值 = 2

2 比队尾 4 小,不能干掉它,老老实实排后面。
队列:[4, 2]


? 第三步:i = 2,数值 = 12

来了个大哥!
比队尾 2 大 ? 踢走
再比前面 4 大 ? 继续踢走
队列空了,大哥自己进来
队列:[12]
✅ 滑动窗口 [4,2,12] 最大值是:12


? 第四步:i = 3,数值 = 3

3 比 12 小,排队
队列:[12, 3]
✅ 窗口 [2,12,3] 最大值还是:12


? 第五步:i = 4,数值 = 8

8 > 3 ? 踢掉 3
8 < 12 ? 进队
队列:[12, 8]
✅ 窗口 [12,3,8] 最大值是:12


? 第六步:i = 5,数值 = 7

7 < 8,直接进队
队列:[12, 8, 7]
? 但 12 对应的是 i = 2,已经滑出窗口(窗口是 i=3~5)
? 踢掉 12
队列剩下:[8, 7]
✅ 窗口 [3,8,7] 最大值是:8


✅ 最终输出的最大值列表是:

? [12, 12, 12, 8]


? 可视化图(队列内容)

步骤当前数值操作描述队列内容当前窗口最大值
04加入[4]-
12加入[4, 2]-
212踢 2, 踢 4, 加 12[12]✅ 12
33加入[12, 3]✅ 12
48踢 3, 加入[12, 8]✅ 12
57加入,踢 12(过期)[8, 7]✅ 8


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • 单调队列模拟
  • 相关推荐

    最新推荐

    热门点击