TOP k问题解题思路

解法: 建立小根堆, 每次存入最小的元素, 当堆内元素大于 k 时候,弹出堆顶最小的元素
遍历完整个数组后,堆内的 k个元素就是最大的K个元素



class Solution {
    
    
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
    
    
        vector<int> res;
        unordered_map<int,int>_map;
        priority_queue<pair<int,int>,vector<pair<int,int>>, greater<pair<int,int>> > pq;
        for (auto i: nums) _map[i]++;
        for(auto x: _map) {
    
    
            int num = x.first,freq = x.second;
            pq.push({
    
    freq,num});
            if (pq.size() == k+1) pq.pop();
        }
        while (pq.size() ) {
    
    
            res.push_back(pq.top().second);pq.pop();
        }
        return res;

    }
};

猜你喜欢

转载自blog.csdn.net/qq_43923045/article/details/112690565