[leetcode] 347. Top K Frequent E

2017-06-06  本文已影响0人  叶孤陈

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<int,int> data;
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int,int> hash;
        priority_queue<data, vector<data>, greater<data>> heap; 
        vector<int > 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;
        
    }
};

相关习题:

上一篇下一篇

猜你喜欢

热点阅读