347. Top K Frequent Elements

思路:

692.Top K words题目是相同的,一样的用hash map对出现的次数进行计数,然后最后再以pair的形式放如堆中,以出现次数为主要排序对象,用默认大顶堆即降序排序即可。

代码:

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int,int> mp;
        int n=nums.size();
        for(auto& num:nums) mp[num]++;  //记录出现的次数
        priority_queue<pair<int,int>> pq;
        for(auto& [num,cnt]:mp){  
            pq.push({-cnt,num});    //-cnt是因为用的降序排序,这样出现最多次的就会是最小的
            if(pq.size()>k) pq.pop();    //每次排出去的是-cnt最大的,也就是出现次数最少的,那么最后只会剩下K个出现频率最大的元素
        }
        vector<int> res;
        while(!pq.empty()){  //加入进 res数组
            res.push_back(pq.top().second);
            pq.pop();
        }
        return res;   //因为题目说可以以任意顺序输出,不需要反转
    }
};
posted @ 2021-04-07 18:50  Mrsdwang  阅读(23)  评论(0编辑  收藏  举报