本题想到的解法是使用哈希表首先统计数组中每个元素出现的次数,然后对出现次数进行排序,最后进行输出。看了题解学习到使用优先级队列 小顶堆来完成,小顶堆的排序规则由自己来定义。
代码如下:
class Solution {
public:
class MyComparison{
public:
bool operator()(const pair<int, int> & p1, const pair<int,int> & p2){
return p1.second > p2.second;
}
};
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> mp;
vector<int> result(k);
for(int i = 0; i < nums.size(); i++){
mp[nums[i]]++;
}
priority_queue<pair<int, int>, vector<pair<int,int>>, MyComparison> pri_que;
for(unordered_map<int,int>::iterator it=mp.begin(); it != mp.end(); it++){
pri_que.push(*it);
if(pri_que.size() > k){
pri_que.pop();
}
}
for(int i = k-1; i >=0; i--){
result[i] = pri_que.top().first;
pri_que.pop();
}
return result;
}
};
标签:nums,元素,pri,力扣,vector,que,mp,高频,result
From: https://blog.csdn.net/why_12134/article/details/139437241