刷代码随想录有感(34):前k个高频元素

本题代码涉及到了多个陌生概念,题干如下:

代码;

class Solution {
public:
    class mycomparison{//自定义规则,使优先队列可以自动排序
    public:
        bool operator()(pair<int, int> & lhs, pair<int, int> & rhs){
            return lhs.second > rhs.second;
        }
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> map;
        for(int i = 0; i < nums.size(); i++){
            map[nums[i]]++;
        }

        
        priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison>p_q;

        for(unordered_map<int, int> :: iterator it = map.begin(); it != map.end(); it++){
            p_q.push(*it);//向p_q传入it所指对象
            if(p_q.size() > k){
                p_q.pop();
            }
        }

        vector<int>res(k);
        for(int i = k - 1; i >=0; i--){
            res[i] = p_q.top().first;
            p_q.pop();
        }
        return res;


    }
};

内部类mycomparison可以规定优先队列的排序规则

定义优先队列,排列可被自定义,以下是详细解释:

https://blog.csdn.net/wangxu__/article/details/115608053?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171339199616800182778311%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171339199616800182778311&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-115608053-null-null.142^v100^pc_search_result_base8&utm_term=%E4%BC%98%E5%85%88%E9%98%9F%E5%88%97%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187icon-default.png?t=N7T8https://blog.csdn.net/wangxu__/article/details/115608053?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171339199616800182778311%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171339199616800182778311&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-115608053-null-null.142%5Ev100%5Epc_search_result_base8&utm_term=%E4%BC%98%E5%85%88%E9%98%9F%E5%88%97%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187

每遍历一次map,向p_q中push一次it所指对象,即*it。

别把first写成front。

摘自代码随想录栈与队列总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值