c++实现给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 输入:第1行为k值,第2行单词列表,单词列表以end结尾,end不属于单词列表中的单词。 2 i love leetcode i love coding end 输出: i love
时间: 2023-11-22 11:55:43 浏览: 63
以下是C++实现的代码,使用了哈希表和排序:
```c++
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
bool cmp(pair<string, int>& a, pair<string, int>& b) {
if (a.second == b.second) {
return a.first < b.first;
}
return a.second > b.second;
}
vector<string> topKFrequent(vector<string>& words, int k) {
unordered_map<string, int> freq;
for (string& word : words) {
freq[word]++;
}
vector<pair<string, int>> pairs(freq.begin(), freq.end());
sort(pairs.begin(), pairs.end(), cmp);
vector<string> res;
for (int i = 0; i < k; i++) {
res.push_back(pairs[i].first);
}
return res;
}
int main() {
int k;
cin >> k;
vector<string> words;
string word;
while (cin >> word && word != "end") {
words.push_back(word);
}
vector<string> res = topKFrequent(words, k);
for (string& word : res) {
cout << word << " ";
}
cout << endl;
return 0;
}
```
首先使用哈希表统计每个单词出现的次数,然后将哈希表转换成vector并按照出现次数和字母顺序排序,最后取前k个单词即可。在排序时需要自定义一个比较函数,按照题目要求排序。