C++ priority_queue 优先级队列构造大根堆和小根堆
最编程
2024-10-04 19:35:32
...
priority_queue的三个参数
template <class T, class Container = std::vector<T>, class Compare = std::less<typename Container::value_type>>
class priority_queue;
1、元素类型
2、底层容器类型,默认vector
3、比较函数(传入的是一个类型):小根堆greater<T>
,大根堆less<T>
常用于求解 数组中第K个最大元素(复杂度O(n)),前K个高频元素 等问题。
例如,求数组中第K个最大元素的三种写法:
class Solution {
public:
class mycompare{
public:
bool operator()(const int& left, const int& right){
return left < right;
}
};
static bool mycompare2(const int& left, const int& right) {
return left < right;
}
int findKthLargest(vector<int>& nums, int k) {
//优先队列:大根堆解法(根节点大于子节点)
priority_queue<int, vector<int>, mycompare> pq;
priority_queue<int, vector<int>, decltype(&mycompare2)> pq(mycompare2);
priority_queue<int, vector<int>, less<int>> pq;
for (int i = 0; i < nums.size(); i++) {
pq.push(nums[i]);
}
for (int i = 0; i < k-1; i++){
pq.pop();
}
return pq.top();
}
};