[leetcode] 347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

**Note: **
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm's time complexity must be better than O(n log n), where n is the array's size.

解题思路
本题直观想法是用哈希表统计元素个数,然后用堆来找出前K个数量最多的元素。具体代码如下:

class Solution {
    typedef pair data;
public:
    vector topKFrequent(vector& nums, int k) {
        unordered_map hash;
        priority_queue, greater> heap; 
        vector ret;
        
        for(int num:nums)
            hash[num]++;
            
        for(auto it:hash)
        {
            heap.push(make_pair(it.second,it.first));
            if(heap.size() > k) heap.pop();
        }
        
        for(int i = 0; i < k; ++i)
        {
            ret.push_back(heap.top().second);
            heap.pop();
        }
        return ret;
        
    }
};

相关习题:

你可能感兴趣的:([leetcode] 347. Top K Frequent Elements)