Leetcode347
1.问题描述
2.解决方案
1.统计频率使用map没什么好说的
2.排序找出前K个可以使用vector排序或者优先队列
代码实现1:vector排序
class Solution {
public:
static bool cmp(pair<int,int> a,pair<int,int> b){
return a.second>b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
//1.
unordered_map<int,int> mp;
for (auto item: nums) {
mp[item]++;
}
//2.
vector<pair<int,int>> vec(mp.begin(),mp.end());
sort(vec.begin(),vec.end(),cmp);
//3.
vector<int> ans;
for(int i=0;i<k;i++){
ans.push_back(vec[i].first);
}
return ans;
}
};
代码实现2:优先队列
class cmp{
public:
bool operator () (pair<int,int> a,pair<int,int> b){
return a.second < b.second; //大根堆
}
};
class Solution1 {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
//1.
unordered_map<int,int> mp;
for (auto item: nums) {
mp[item]++;
}
//2.
priority_queue<pair<int,int>,vector<pair<int,int>>,cmp> queue;
for (auto item: mp) {
queue.push(item);
}
//3.
vector<int> ans;
for(int i=0;i<k;i++){
ans.push_back(queue.top().first);
queue.pop();
}
return ans;
}
};