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;
}
};