思路
利用优先队列进行排序,然后利用multiset对count进行排序,最后收集k个高频元素就行
代码
cpp
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
priority_queue<int> pq;
for(int i = 0; i < nums.size(); i++){
pq.push(nums[i]);
}
multimap<int, int > myMap;
while(!pq.empty()){
int count = 0;
int value = pq.top();
while(!pq.empty() && pq.top() == value){
pq.pop();
count++;
}
pair<int, int> p = {count, value};
myMap.insert(p);
}
vector<int> res;
for(auto it = myMap.rbegin(); k-- ; it++){
res.push_back(it->second);
}
return res;
}
};