前K个常用词



给定一个字符串单词数组和一个整数k,返回k个最频繁的字符串。返回按频率从高到低排序的答案。按词典顺序对频率相同的单词进行排序。

示例1:

输入:单词=["i","爱","leetcode","i"、"爱"、"编码"],k=2输出:["i","love"]说明:";i〃;以及";爱;是两个最常见的词。注意,";i〃;在";爱;由于字母顺序较低。

我正试图使用Frequencies来解决这个问题,并存储最多的一个,循环k次来获得所有的,但我有一个问题,我不能将它们作为字典顺序返回upd:我解决了,谢谢!

class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
int n =words.size();
map<string ,int > Freq;

for (int i = 0 ; i< n;i++)
Freq[words[i]]++;

vector<pair<string ,int >>result;
vector<string>ans;
for (auto it : Freq)
result.push_back({it.first,it.second});
sort(result.begin(),result.end());
for (int i = 0 ; i < min(k,n);i++)
ans.push_back(result[i].first);
return ans;
}
};

您必须使用compare函数作为排序函数中的第三个参数。compare函数将根据您的需要对值进行精确排序!

class Solution {
public:
static bool cmp(pair<string ,int > &p1 ,  pair<string ,int > &p2)
{
if (p1.second == p2.second)return p1.first < p2.first ;
return p1.second > p2.second;
} 
vector<string> topKFrequent(vector<string>& words, int k) {
int n =words.size();
map<string ,int > Freq;
for (int i = 0 ; i< n;i++)
Freq[words[i]]++;
vector<pair<string ,int >>result;
vector<string>ans;
for (auto &it : Freq)
result.push_back({it.first,it.second});
sort(result.begin(),result.end(),cmp);
for (int i = 0 ; i < min(k,n);i++)
ans.push_back(result[i].first);
return ans;
}
};

最新更新