什么是单调队列?
作者:野牛程序员:2025-05-01 09:04:28数据结构阅读 2019
什么是单调队列?
单调队列是一种保持队列内元素单调有序的数据结构,常用于处理滑动窗口最大值/最小值、动态规划优化等问题。简单点说,它就是一个“特别挑剔”的队列,不是所有元素都能进来,能进来的也可能会被踢出去,只保留对结果有价值的元素。
🎯 核心特点:
单调递增队列:队列中的元素从前到后是递增的(用于求最小值)
单调递减队列:队列中的元素从前到后是递减的(用于求最大值)
📦 举个例子(滑动窗口最大值):
给一堆数字:[4, 2, 12, 3, 8, 7]
窗口大小是3,问每个窗口里的最大值是多少?
✅ 用单调递减队列存储窗口内最大值候选:
每来一个数,把队尾比它小的都踢掉,因为它们没用了。
每移动一个窗口,如果队头元素滑出了窗口范围,就把它也踢出去。
效率极高,每个数最多进队一次,出队一次,时间复杂度 O(n)!
🧠 在背包问题中的应用:
比如在多重背包的优化里,经典的「枚举物品个数」写法效率太低,单调队列优化就能:
把多个重复物品转换成一个滑动窗口问题
用单调队列高效求出某些最大值/最小值
让多重背包从 O(n×m×s) 提速到 O(n×m),堪称“算法性能提升神器”!
📌 总结一句话:
单调队列不是一个神奇的结构,而是一种聪明地保持有用信息,丢掉没用数据的策略,让程序飞起来🚀!
是否需要一个可视化的动图或者代码示例辅助理解?
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:【野牛程序员版】《背包九讲》少儿趣味版(C++)
- 下一篇:单调队列模拟