LeetCode题解——前K个高频单词
- 题目介绍
- 解题思路
- 这题需要抓住2个关键点,排序,每个元素出现次数,那么很容易可以想到用一个key-value相关的容器来存放数据,同时value存放出现次数
- 现在有两种可以,一是map,但是map不好排序(但也有方法),另一种用pair的方法插入到vector,可以用自带的sort函数进行排序了
- 不管如何首先先遍历words数组,取出key-value存放到map里面,然后接下来就是一个排序的操作了,如果出现次数相同按字母排序否则按次数排序
-
dict[a] == dict[b] ? a < b : dict[a] > dict[b];dict就是上面的map,ab是key,这个三元表达式,就是次数相同比较key,否则比较value
- 代码示例
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
map<string,int> dict;
vector<string> res;
for(auto &word:words){
dict[word]++; //统计元素出现个数
}
for(auto &[key,value]:dict){
res.push_back(key); //将key保存到vector,然后排序是以自己定义的函数排序,这边dict和res在同一个作用域,可以直接访问
}
sort(res.begin(),res.end(), [&](const string &a, const string &b) -> bool {
return dict[a] == dict[b] ? a < b : dict[a] > dict[b]; //sort的比较函数
});
res.erase(res.begin() + k, res.end()); //只保留k个元素,后面的全部删除
return res;
}
};