C++ priority_queue 优先队列构造大根堆和小根堆

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();
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值