LeetCode 692.前K个高频单词 C++
思路🧐:
首先用map存储该字典,然后放进vector进行排序,注意sort的排序规则与我们想要的规则不一致,所以我们需要写一个伪函数来判断second(value值),由于该题要求了稳定性,所以我们在伪函数还需要继续判断相等情况的顺序。排完序后用vector将前k个单词存储起来返回。
代码🔎:
class Solution { public: struct Ksort { 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> top; for(auto& e : words) { top[e]++; } vector<pair<string,int>> v(top.begin(),top.end()); //vector兼容多种迭代器 sort(v.begin(),v.end(),Ksort()); //排序 vector<string> topv; for(size_t i = 0; i < k; i++) //选取前k个 { topv.push_back(v[i].first); } return topv; } };