#include<queue>
#include<vector>
std::priority_queue<int> big_heap; // 构造一个默认最大堆
std::priority_queue<int, std::vector<int>, std::greater<int> > small_heap; //构造一个最小堆
最大堆:所有的父节点都要比子节点要大。故根结点为最大值。
最小堆:所有的父节点都要比子节点要小。故根结点为最小值。
注:堆排序的时间复杂度为log(n);
最大最小堆的基本操作:
heap.top(); //返回最大或者最小元素。即根结点的值
heap.pop(); //删除最大或者最小元素,即根结点的值
heap.push(); //push一个值进最大/最小堆,根据值的大小排列堆
heap.empty(); //返回是否为空
heap.size(); //返回堆中元素个数
最大最小堆的应用:主要是利用堆可以动态的排序,随时可以取出最大值或者最小值。
例题:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int, std::vector<int>, std::greater<int> > small_queue;
for(int i=0; i<nums.size(); ++i){
if(i<k){