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

什么是单调队列?

作者:野牛程序员:2025-05-01 09:04:28数据结构阅读 2019
什么是单调队列?

单调队列是一种保持队列内元素单调有序的数据结构,常用于处理滑动窗口最大值/最小值动态规划优化等问题。简单点说,它就是一个“特别挑剔”的队列,不是所有元素都能进来,能进来的也可能会被踢出去,只保留对结果有价值的元素


🎯 核心特点:

  • 单调递增队列:队列中的元素从前到后是递增的(用于求最小值)

  • 单调递减队列:队列中的元素从前到后是递减的(用于求最大值)


📦 举个例子(滑动窗口最大值)

给一堆数字:[4, 2, 12, 3, 8, 7]
窗口大小是3,问每个窗口里的最大值是多少?

✅ 用单调递减队列存储窗口内最大值候选:

  • 每来一个数,把队尾比它小的都踢掉,因为它们没用了。

  • 每移动一个窗口,如果队头元素滑出了窗口范围,就把它也踢出去。

效率极高,每个数最多进队一次,出队一次,时间复杂度 O(n)


🧠 在背包问题中的应用:

比如在多重背包的优化里,经典的「枚举物品个数」写法效率太低,单调队列优化就能:

  • 把多个重复物品转换成一个滑动窗口问题

  • 用单调队列高效求出某些最大值/最小值

让多重背包从 O(n×m×s) 提速到 O(n×m),堪称“算法性能提升神器”!


📌 总结一句话:

单调队列不是一个神奇的结构,而是一种聪明地保持有用信息,丢掉没用数据的策略,让程序飞起来🚀!

是否需要一个可视化的动图或者代码示例辅助理解?


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

    最新推荐

    热门点击