LeetCode Top K Frequent Elements

Description

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.

The original problem is here.

My Solution

I solve this problem in C++, as below:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int, int> freq;
for (int i = 0; i < nums.size(); i++) {
freq[nums[i]] ++;
}
priority_queue<pair<int,int>> vecFreq;
for(map<int,int>::iterator iter=freq.begin(); iter != freq.end(); iter++) {
vecFreq.push(make_pair(iter->second,iter->first));
}
vector<int> res;
for(int i=0;i<k;i++) {
res.push_back(vecFreq.top().second);
vecFreq.pop();
}
return res;
}
};

Note

To solve the problem, use maxHeap, namely priority_queue in C++.