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; //創(chuàng)造一個最大堆
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;
}
};