Skip to content

队列算法题分类解析

1. 基础实现与栈混合类

类型特点:考察对队列(FIFO)和栈(LIFO)核心特性的理解。通常要求用栈实现队列,或者用队列实现栈,掌握这两种数据结构的相互转换。

难度题目核心思路简介
简单232. 用栈实现队列使用两个栈(输入栈 + 输出栈),输出栈为空时将输入栈全部倒入输出栈
简单225. 用队列实现栈使用一个或两个队列,将队尾元素移到队首(弹出前将前 n-1 个元素重新入队)

2. 优先队列(堆)类

类型特点:优先队列(Priority Queue)在力扣中通常用堆(Heap) 实现。用于解决需要动态获取最大值/最小值的场景,如 Top K 问题、数据流中位数、任务调度等。

难度题目核心思路简介
中等347. 前 K 个高频元素哈希表统计频率 + 最小堆维护 Top K
中等215. 数组中的第K个最大元素维护一个大小为 K 的最小堆,或使用快速选择
困难295. 数据流的中位数维护两个堆:最大堆存左半部分,最小堆存右半部分
中等621. 任务调度器贪心 + 最大堆模拟任务调度
困难23. 合并K个升序链表将每个链表的头节点放入优先队列,每次弹出最小值节点

3. 单调队列类

类型特点:队列中的元素保持单调性(递增或递减)。用于解决滑动窗口最值问题,可以在 O(1) 时间内获取窗口内的最大值或最小值。

难度题目核心思路简介
困难239. 滑动窗口最大值维护一个单调递减队列,队首始终为当前窗口最大值
困难480. 滑动窗口中位数维护两个堆(平衡二叉搜索树),滑动窗口时动态调整

4. 广度优先搜索(BFS)类

类型特点:队列是 BFS 的核心数据结构。用于层级遍历最短路径拓扑排序等问题。树的层次遍历也是队列的经典应用 。

难度题目核心思路简介
中等102. 二叉树的层序遍历使用队列逐层存储节点,记录每层大小
中等200. 岛屿数量BFS/DFS 遍历二维数组,遇到 '1' 将其周围所有 '1' 入队标记
中等207. 课程表拓扑排序(BFS 版),统计入度,将入度为 0 的节点入队
困难126. 单词接龙 IIBFS 构建图 + DFS 找出所有最短路径

5. 双端队列(Deque)类

类型特点:双端队列允许在两端进行插入和删除操作。常用于需要两端操作的场景,或实现单调队列。

难度题目核心思路简介
中等641. 设计循环双端队列使用数组实现,维护头尾指针,处理边界循环
中等1438. 绝对差不超过限制的最长连续子数组使用两个双端队列分别维护窗口最大值和最小值

6. 队列简单应用类

类型特点:直接考察队列的基础操作,如入队、出队、循环队列等。

难度题目核心思路简介
简单933. 最近的请求次数使用队列存储请求时间,剔除超出时间范围的老请求
中等622. 设计循环队列使用数组和头尾指针,处理队列满和空的判断

刷题建议

  1. 基础先行:从 232. 用栈实现队列225. 用队列实现栈 入手,理解两种数据结构的本质区别。
  2. 掌握 BFS:队列最广泛的应用是 BFS,建议练习 102. 二叉树的层序遍历200. 岛屿数量,这是面试高频题。
  3. 攻克单调队列:如果时间充裕,挑战 239. 滑动窗口最大值,这道题能帮助你深刻理解单调队列的优化思想。
  4. 熟悉优先队列:堆(优先队列)在后续的图论、动态规划优化中会频繁用到,建议掌握 347. 前 K 个高频元素 的堆解法。

Released under the MIT License.