• 重写比较方法
  • 新建小顶堆
class Solution {
public:

    struct comp {
        bool operator()(pair<int,int>&p1,pair<int,int>&p2){
            return p1.second > p2.second;
        }
    };

    vector<int> topKFrequent(vector<int>& nums, int k) {
        // map存储每个数字出现的次数
        unordered_map<int,int> map;

        // 重写比较方法,实现小顶堆,存储k个高频pair
        priority_queue<pair<int,int>,vector<pair<int,int>>,comp> q;

        vector<int> res(k);

        for(int num : nums){
            map[num]++;
        }

        for(auto x : map){
            q.push(x);
            if(q.size() > k)
            // 小顶堆,当元素大于k时,弹出栈顶元素
                q.pop();
        }

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

        
        return res;

        
    }
};