题目
思路 优先队列/小顶堆
用哈希表把每个数据出现的次数存储下来,再用优先队列把次数和数据存入小顶堆,维持优先队列的大小为k。
代码
class Solution {
public:
typedef pair<int,int> pii;
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> ans;
unordered_map<int,int> map;
for(int num:nums)
map[num]++;
priority_queue<pii, vector<pii>, greater<pii>> pq;
for(auto it = map.begin(); it != map.end(); it++){
pq.push(make_pair(it->second, it->first));
if(pq.size() > k)
pq.pop();
}
while(!pq.empty()){
ans.push_back(pq.top().second);
pq.pop();
}
return ans;
}
};