优先队列
入门优先队列不是按进入顺序,而是按优先级决定谁先出场。
// 算法讲解
优先队列
会展示高优先级元素如何先出队,而不是按进入顺序。
待机
速度 中
待机 ⌨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 常默认是大根堆,如果题目要最小值优先,需要改比较器。
理解这个结构时,要把关注点从线性顺序切换到"堆顶代表当前全局最优"。