692. Top K Frequent Words
Input: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
Output: ["i", "love"]
Explanation: "i" and "love" are the two most frequent words.
Note that "i" comes before "love" due to a lower alphabetical order.Input: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
Output: ["the", "is", "sunny", "day"]
Explanation: "the", "is", "sunny" and "day" are the four most frequent words,
with the number of occurrence being 4, 3, 2 and 1 respectively.// Bucket sort
vector<string> topKFrequent(vector<string>& words, int k) { // time: O(nlogn); space: O(n)
vector<string> res;
unordered_map<string, int> freq;
vector<set<string> > v(words.size() + 1);
for (auto& word : words) ++freq[word];
for (auto& f : freq) v[f.second].insert(f.first);
for (int i = v.size() - 1; i >= 0; --i) {
if (k <= 0) break;
vector<string> t(v[i].begin(), v[i].end());
if (k >= t.size())
res.insert(res.end(), t.begin(), t.end());
else
res.insert(res.end(), t.begin(), t.begin() + k);
k -= t.size();
}
return res;
}Last updated