1.先构建一个map容器存放出现的单词和它出现的个数
2.构建一个vector存放键对,这样就可以将其排序了
3.注意sort排序是一种快排,即不稳定排序,要么在仿函数自定义排序规则的时候定义好,要么使用stable_sort函数()
代码如下:
1.
class Solution {
public:
struct compare
{
bool operator()(const pair<string,int>& kv1,const pair<string,int>& kv2)
{
return kv1.second > kv2.second||((kv1.second == kv2.second) && kv1.first < kv2.first);
}
};
vector<string> topKFrequent(vector<string>& words, int k) {
map<string,int> countMap;
for(auto& str : words)
{
countMap[str]++;
}
vector<pair<string,int>> v(countMap.begin(),countMap.end());
stable_sort(v.begin(),v.end(),compare());
vector<string> ret;
for(size_t i = 0;i<k;++i)
{
cout<<v[i].first<<":"<<v[i].second<<endl;
ret.push_back(v[i].first);
}
return ret;
}
};
2.
class Solution {
public:
struct compare
{
bool operator()(const pair<string,int>& kv1,const pair<string,int>& kv2)
{
return kv1.second > kv2.second;
}
};
vector<string> topKFrequent(vector<string>& words, int k) {
map<string,int> countMap;
for(auto& str : words)
{
countMap[str]++;
}
vector<pair<string,int>> v(countMap.begin(),countMap.end());
stable_sort(v.begin(),v.end(),compare());
vector<string> ret;
for(size_t i = 0;i<k;++i)
{
cout<<v[i].first<<":"<<v[i].second<<endl;
ret.push_back(v[i].first);
}
return ret;
}
};