c++实现给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 输入:第1行为k值,第2行单词列表,单词列表以end结尾,end不属于单词列表中的单词。 2 i love leetcode i love coding end 输出:
时间: 2023-11-22 21:55:42 浏览: 49
以下是C++代码实现:
```cpp
#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;
for (auto it : freq) {
pairs.push_back(it);
}
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 s;
while (cin >> s && s != "end") {
words.push_back(s);
}
vector<string> res = topKFrequent(words, k);
for (string word : res) {
cout << word << " ";
}
cout << endl;
return 0;
}
```
代码思路:
1. 首先使用一个哈希表记录每个单词出现的频率。
2. 将哈希表中的键值对转化为一个pair数组,并对该数组进行排序。排序的依据是先按照出现频率从大到小排序,如果出现频率相同,则按照字母顺序排序。
3. 最后返回前k个出现频率最高的单词。
阅读全文