优先队列

入门

优先队列不是按进入顺序,而是按优先级决定谁先出场。

优先队列

会展示高优先级元素如何先出队,而不是按进入顺序。

AlgoAnim · 优先队列

待机

速度
待机
// 源代码
1priority_queue<int, vector<int>, greater<int>> pq;
2
3void addTask(int priority) {
4    pq.push(priority);
5}
6
7int nextTask() {
8    int value = pq.top();
9    pq.pop();
10    return value;
11}

复杂度分析

时间 push/pop O(log n)
空间 O(n)
最优 top O(1)
最坏 push/pop O(log n)

算法讲解

优先队列对外暴露的语义是"每次取出当前最小或最大元素",而不是 FIFO 或 LIFO。

Dijkstra、A*、任务调度和 Top-K 问题都依赖这种"优先处理最关键状态"的能力。

标准库里的 priority_queue 常默认是大根堆,如果题目要最小值优先,需要改比较器。

理解这个结构时,要把关注点从线性顺序切换到"堆顶代表当前全局最优"。