刷LeetCode中用到的Priority Queue使用
Priority Queue 优先队列
priority_queue
是包含在头文件#include<queue>
中的,它与queue不同点就在于它会自动为queue内的元素进行排序。
priority_queue包含所有队列的特性,包括所有的基本操作,只是在这个基础上添加了一个内部排序,它的本质是一个堆实现的。
1 | 什么是堆? |
和队列基本操作相同:
- top() 访问对头元素
- empty() 队列是否为空
- size() 返回队列内元素个数
- push() 插入元素到队尾,并排序
- emplace() 原地构造一个元素并插入队列
- pop() 弹出队头元素
- swap() 交换内容
优先队列定义
priority_queue<Type, Container, Functional>
- Type是数据类型
- Container是容器类型,Container必须是用数组实现的容器,比如vector,dqueue等,但是不能用list。STL里默认用vector
- Functional是比较的方式。
当需要自定义的数据类型时才需要传入这三个参数。
对于基本数据类型,排序默认大推顶
priority_queue<int, vector<int>, greater<int> >
小推顶priority_queue<int, vector<int>, less<int>>
大推顶
LeetCode例子
#215. Kth Largest element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
Example 1:
Input: [3,2,1,5,6,4] and k = 2
Output: 5
Example 2:
Input: [3,2,3,1,2,4,5,5,6] and k = 4
Output: 4
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
题解:
1 | class Solution { |