leetcode 347.前 K 个高频元素

image.png
class Solution {
public:
    vector topKFrequent(vector& nums, int k) {
        unordered_map map;
        for(auto it:nums){map[it]++;};
        priority_queue,vector>,greater>> 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 res;
        while(q.size()){
            res.push_back(q.top().second);
            q.pop();
        }
        reverse(res.begin(),res.end());
        return res;
    }
};

你可能感兴趣的:(leetcode 347.前 K 个高频元素)