原题链接:https://leetcode-cn.com/problems/top-k-frequent-words/
题意:
给一非空的单词列表,返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。
方法:哈希表,在向量vector中存入pair对,通过vector来进行哈希表value的排序
bool cmp(pair<string,int> a,pair<string,int> b)//定义vector中pair的排序方法
{
if(a.second==b.second)
return a.first<b.first;//返回比较短的那个
return a.second>b.second;//返回次数出现最多的那个
}
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
vector<string> ret;//要返回的结果
unordered_map<string,int> mp1;//哈希表
vector<pair<string,int>> v1;//向量中放入键值对
for(string &word:words)
{
mp1[word]++;
}
auto iter=mp1.begin();
while(iter!=mp1.end())
{
v1.push_back(*iter);//将哈希表中的每一项都存入向量中,向量中的每一项和哈希表中的每一项结构一致。
iter++;
}
sort(v1.begin(),v1.end(),cmp);//通过向量进行排序
auto iter1 = v1.begin();
for(int i=0;i<k;i++)
{
ret.push_back(iter1->first);//迭代放入哈希表中value值最大的前k个元素
iter1++;
}
return ret;
}
};

本文介绍如何使用哈希表和向量实现LeetCode题目Top K Frequent Words,通过自定义排序函数解决单词频率和字母顺序的并列排序问题。
462

被折叠的 条评论
为什么被折叠?



