题意理解
找出数组中前k个高频数字
问题分析
STL:map+priority_queue+vector
map保存数字+频率对,用优先队列(最大堆)保存频率+数字对,用vector保存从优先队列中弹出的数字,弹7次取7个数字。
其他
参考链接:https://www.jianshu.com/p/6c67c7163286
链接
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> res;
map<int, int> dict; //字典保存单词+频率
for(int a : nums) { //遍历列表生成字典
dict[a] ++;
}
priority_queue<pair<int, int>> queue; //优先级队列(最大堆),第一个元素是频率,第二个元素是数字
for(auto elem : dict) { //遍历字典
queue.push({elem.second, elem.first}); //插入字典的频率+数字对(和字典相反),用push方法不是push_back.
}
for (int i = 0; i != k ; i ++) { //依次输出前k个元素
res.push_back(queue.top().second); //top取出高频数字对,数字在对pair的第二个
queue.pop(); //从堆中取完就删掉
}
return res;
}