题目大意:找出数组中出现频率前k高的元素们
分析:TOPK问题。类似leetcode215,使用堆来维护topk,这道题还需要使用哈希表统计元素频率。时间复杂度O(nlogk),空间复杂度O(k)。
代码:
class Solution {
struct cmp{
bool operator()(pair<int,int> p1,pair<int,int> p2){
return p1.second > p2.second;
}
};
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> m;
for(int num : nums){
m[num]++;
}
priority_queue<pair<int,int>,vector<pair<int,int>>,cmp> que;
for(auto it : m){
que.push(it);
if(que.size() > k) que.pop();
}
vector<int> ans;
while(!que.empty()){
ans.push_back(que.top().first);
que.pop();
}
return ans;
}
};