- leetcode347-前K个高频元素
题型:堆、排序
难度:中等
题目:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
代码:
class Solution {
public:
static bool cmp(const pair<int,int> &pr1,const pair<int,int> &pr2){
return pr1.second > pr2.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> mp;
for(int i=0;i<nums.size();i++)
{
mp[nums[i]]++;
}
priority_queue<pair<int,int>,vector<pair<int,int> >,decltype(&cmp)> que(cmp);
unordered_map<int,int>::iterator ite = mp.begin();
while(ite != mp.end())
{
que.push(*ite);
if(que.size() > k)
que.pop();
ite++;
}
vector<int> vec(k,0);
for(int i=k-1;i>=0;i--)
{
vec[i] = que.top().first;
que.pop();
}
return vec;
}
};