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;
}
};
相关习题: