
思路:和前K个高频元素那道题目只有构建小顶堆时有一丢丢差别
class mycompare{
public:
bool operator()(const pair<string,int>& lhs,const pair<string,int>& rhs){
return lhs.second>rhs.second ||(lhs.second==rhs.second && lhs.first<rhs.first);
}
};
class Solution {
public:
vector<string> topKFrequent(vector<string>& words, int k) {
if(words.size()<2) return {words[0]};
unordered_map<string,int> map;
for(int ii=0;ii<words.size();ii++){
map[words[ii]]++;
}
priority_queue<pair<string,int>,vector<pair<string,int>>,mycompare> pri_que;
for(auto it=map.begin();it!=map.end();it++){
pri_que.push(*it);
if(pri_que.size()>k) pri_que.pop();
}
vector<string> res(k);
for(int ii=k-1;ii>=0;ii--){
string s1=pri_que.top().first;
res[ii]=s1;
pri_que.pop();
}
return res;
}
};