Tips!关于输出前K个数的问题

Leetcode-347
要求按出现频率进行排序:首先我们应该先统计好每个数字出现的次数,放进一个Hash表中。然后按照频率高低进行排序放进容器,最后输出容器中的前K个数。
因为优先队列的大根堆特性,把Hash表存进里面便可以完成自动排序,同理我们也可以把它放进vector中然后进行sort是一样的。
第一种方法:

vector res;
unordered_map mp;
priority_queue> pq;
for(auto e:nums){
    mp[e]++;
}
for(auto it:mp){
    pq.push(make_pair(it.second,it.first));
}
while(k--){
    res.push_back(pq.top().second);
    pq.pop();
}
return res;

第二种方法:

vector res;
unordered_map mp;
vector> temp;
for(auto e:nums){
    mp[e]++;
}
for(auto it:mp){
    temp.push_back(make_pair(it.second,it.first));
}
sort(temp.begin(),temp.end(),comp);

for(int i = 0;i &a,pair &b){
    return a.first>b.first;
}

你可能感兴趣的:(c++,leetcode)