先使用map,统计每个字符出现的频率,然后使用优先队列根据字符出现频率存储字符,然后弹出堆中元素,弹出K次完成操作!
如果看不懂本题CPP语法的,可以参考我的另外一篇博客------------->CPP优先队列priority_queue,定义比较器,重载operator()
cpp
class less1{
public:
bool operator()(const pair<int,int>& p1,const pair<int,int>& p2){
return p1.second<p2.second;
}
};
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> m;
vector<int> ans;
for(int i=0;i<nums.size();++i){
m[nums[i]]++;
}
priority_queue<pair<int,int>,vector<pair<int,int>>,less1> pq;
for(const auto& item:m){
pq.push(item);
}
for(int i=0;i<k;++i){
ans.push_back(pq.top().first);
pq.pop();
}
return ans;
}
};