队列
共 17 条分类条目,6 个题型小节; 每行标注难度、题号、原笔记摘要和 LeetCode 链接。
1. 基础实现与栈混合类
2 条类型特点:考察对队列(FIFO)和栈(LIFO)核心特性的理解。通常要求用栈实现队列,或者用队列实现栈,掌握这两种数据结构的相互转换。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 简单 | 232. 用栈实现队列#232 LeetCode ↗ | 使用两个栈(输入栈 + 输出栈),输出栈为空时将输入栈全部倒入输出栈 |
| 简单 | 225. 用队列实现栈#225 LeetCode ↗ | 使用一个或两个队列,将队尾元素移到队首(弹出前将前 n-1 个元素重新入队) |
- 简单#232
使用两个栈(输入栈 + 输出栈),输出栈为空时将输入栈全部倒入输出栈
- 简单#225
使用一个或两个队列,将队尾元素移到队首(弹出前将前 n-1 个元素重新入队)
2. 优先队列(堆)类
5 条类型特点:优先队列(Priority Queue)在力扣中通常用堆(Heap) 实现。用于解决需要动态获取最大值/最小值的场景,如 Top K 问题、数据流中位数、任务调度等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 347. 前 K 个高频元素#347 LeetCode ↗ | 哈希表统计频率 + 最小堆维护 Top K |
| 中等 | 215. 数组中的第K个最大元素#215 LeetCode ↗ | 维护一个大小为 K 的最小堆,或使用快速选择 |
| 困难 | 295. 数据流的中位数#295 LeetCode ↗ | 维护两个堆:最大堆存左半部分,最小堆存右半部分 |
| 中等 | 621. 任务调度器#621 LeetCode ↗ | 贪心 + 最大堆模拟任务调度 |
| 困难 | 23. 合并K个升序链表#23 LeetCode ↗ | 将每个链表的头节点放入优先队列,每次弹出最小值节点 |
- 中等#347
哈希表统计频率 + 最小堆维护 Top K
- 中等#215
维护一个大小为 K 的最小堆,或使用快速选择
- 困难#295
维护两个堆:最大堆存左半部分,最小堆存右半部分
- 中等#621
贪心 + 最大堆模拟任务调度
- 困难#23
将每个链表的头节点放入优先队列,每次弹出最小值节点
3. 单调队列类
2 条类型特点:队列中的元素保持单调性(递增或递减)。用于解决滑动窗口最值问题,可以在 O(1) 时间内获取窗口内的最大值或最小值。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 困难 | 239. 滑动窗口最大值#239 LeetCode ↗ | 维护一个单调递减队列,队首始终为当前窗口最大值 |
| 困难 | 480. 滑动窗口中位数#480 LeetCode ↗ | 维护两个堆(平衡二叉搜索树),滑动窗口时动态调整 |
- 困难#239
维护一个单调递减队列,队首始终为当前窗口最大值
- 困难#480
维护两个堆(平衡二叉搜索树),滑动窗口时动态调整
4. 广度优先搜索(BFS)类
4 条类型特点:队列是 BFS 的核心数据结构。用于层级遍历、最短路径、拓扑排序等问题。树的层次遍历也是队列的经典应用 。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 102. 二叉树的层序遍历#102 LeetCode ↗ | 使用队列逐层存储节点,记录每层大小 |
| 中等 | 200. 岛屿数量#200 LeetCode ↗ | BFS/DFS 遍历二维数组,遇到 '1' 将其周围所有 '1' 入队标记 |
| 中等 | 207. 课程表#207 LeetCode ↗ | 拓扑排序(BFS 版),统计入度,将入度为 0 的节点入队 |
| 困难 | 126. 单词接龙 II#126 LeetCode ↗ | BFS 构建图 + DFS 找出所有最短路径 |
- 中等#102
使用队列逐层存储节点,记录每层大小
- 中等#200
BFS/DFS 遍历二维数组,遇到 '1' 将其周围所有 '1' 入队标记
- 中等#207
拓扑排序(BFS 版),统计入度,将入度为 0 的节点入队
- 困难#126
BFS 构建图 + DFS 找出所有最短路径
5. 双端队列(Deque)类
2 条类型特点:双端队列允许在两端进行插入和删除操作。常用于需要两端操作的场景,或实现单调队列。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 中等 | 641. 设计循环双端队列#641 LeetCode ↗ | 使用数组实现,维护头尾指针,处理边界循环 |
| 中等 | LeetCode ↗ | 使用两个双端队列分别维护窗口最大值和最小值 |
- 中等#641
使用数组实现,维护头尾指针,处理边界循环
- 中等#1438
使用两个双端队列分别维护窗口最大值和最小值
6. 队列简单应用类
2 条类型特点:直接考察队列的基础操作,如入队、出队、循环队列等。
| 难度 | 题目 | 核心思路(原笔记摘要) |
|---|---|---|
| 简单 | 933. 最近的请求次数#933 LeetCode ↗ | 使用队列存储请求时间,剔除超出时间范围的老请求 |
| 中等 | 622. 设计循环队列#622 LeetCode ↗ | 使用数组和头尾指针,处理队列满和空的判断 |
- 简单#933
使用队列存储请求时间,剔除超出时间范围的老请求
- 中等#622
使用数组和头尾指针,处理队列满和空的判断