题目
Leetcode 692. 前K个高频单词
代码(9.10 首刷自解)
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
unordered_map<string, int> mp;
for(string& word : words) {
mp[word]++;
}
auto cmp = [](auto a, auto b) {
if(a.second == b.second)
return a.first > b.first;
return a.second < b.second;
};
priority_queue<pair<string, int>, vector<pair<string, int>>, decltype(cmp)> q(cmp);
vector<string> ans;
for(auto& kv : mp) {
q.emplace(kv.first, kv.second);
}
while(k--) {
ans.emplace_back(q.top().first);
q.pop();
}
return ans;
}
};
代码(10.7 二刷自解)
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
unordered_map<string, int> mp;
for(string& s : words)
mp[s]++;
auto cmp = [](auto& a, auto& b) {
if(a.second == b.second)
return a.first > b.first;
return a.second < b.second;
};
priority_queue<pair<string, int>, vector<pair<string, int>>, decltype(cmp)> q(cmp);
for(auto kv : mp)
q.push(kv);
vector<string> res;
for(int i = 0; i < k; i++) {
res.emplace_back(q.top().first);
q.pop();
}
return res;
}
};