力扣692. 前K个高频单词(哈希+小顶堆)
https://leetcode-cn.com/problems/top-k-frequent-words/
- 哈希记录次数
- 建立list,排序,形成小顶堆
- 输出前k个
几个注意的点:
1、迭代器的使用:C++迭代器(STL迭代器)iterator详解
正向:vector<pair<string, int>>::iterator it=sorted_list.begin();it!=sorted_list.end();it++
反向:vector<pair<string, int>>::reverse_iterator it=sorted_list.rbegin();it!=sorted_list.rend();it++
it->first it->second *it取内容
2、lambda 表达式,匿名函数,用在sort排序中,
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
map<string,int>mp;
priority_queue<map<string,int>,vector<map<string,int>>,greater<map<string,int>>>pq;
for(int i=0;i<words.size();i++)
{
mp[words[i]]++;
}
vector<pair<string, int>> sorted_list(mp.begin(), mp.end());
sort(sorted_list.begin(),sorted_list.end(),[](const pair<string, int>& p1,const pair<string, int>& p2){
if(p2.second==p1.second)
{
return p2.first>p1.first;
}
return p2.second<p1.second;
});
vector<string>res;
for(vector<pair<string, int>>::iterator it=sorted_list.begin();it!=sorted_list.end();it++)
{
res.push_back(it->first);
if(res.size()==k)break;
}
return res;
}
};