347. Top K Frequent Elements
思路:
和692.Top K words题目是相同的,一样的用hash map对出现的次数进行计数,然后最后再以pair的形式放如堆中,以出现次数为主要排序对象,用默认大顶堆即降序排序即可。
代码:
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> mp;
int n=nums.size();
for(auto& num:nums) mp[num]++; //记录出现的次数
priority_queue<pair<int,int>> pq;
for(auto& [num,cnt]:mp){
pq.push({-cnt,num}); //-cnt是因为用的降序排序,这样出现最多次的就会是最小的
if(pq.size()>k) pq.pop(); //每次排出去的是-cnt最大的,也就是出现次数最少的,那么最后只会剩下K个出现频率最大的元素
}
vector<int> res;
while(!pq.empty()){ //加入进 res数组
res.push_back(pq.top().second);
pq.pop();
}
return res; //因为题目说可以以任意顺序输出,不需要反转
}
};