https://leetcode-cn.com/problems/top-k-frequent-words/
思路:先用哈希统计每个单词的出现次数,然后就是经典问题:求前
k
k
k个最大/小元素。堆或者快排分割都行。
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
unordered_map<string,int> cnt;
for(auto &str:words)
++cnt[str];
using mypr=pair<int,string>;
auto cmp=[](const mypr &a,const mypr &b)->bool
{
if(a.first==b.first)
return a.second<b.second;
return a.first>b.first;
};
priority_queue<mypr,vector<mypr>,decltype(cmp)> q(cmp);
for(auto &pr:cnt)
{
q.emplace(pr.second,pr.first);
if(q.size()>k)
q.pop();
}
vector<string> ans(k);
for(int i=k-1;i>=0;i--)
{
ans[i]=move(q.top().second);
q.pop();
}
return ans;
}
};