leetcode 347.前 K 个高频元素

image.png
class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int,int> map;
        for(auto it:nums){map[it]++;};
        priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q; //创造一个最大堆
        for(auto it:map){
            if(q.size() == k){ //如果最大堆满了,就比较待加入的pair的second元素和堆top的first哪个大,如果待加入元素比较大,则把top弹出,更新
                if(it.second>q.top().first){
                    q.pop();
                    q.push(make_pair(it.second,it.first));
                }
            }else{
                q.push(make_pair(it.second,it.first));
            }
        }
        vector<int> res;
        while(q.size()){
            res.push_back(q.top().second);
            q.pop();
        }
        reverse(res.begin(),res.end());
        return res;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。