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 logn), wheren is the array's size.
题目解析:找出一个数组中出现频率最高的k个数
算法:这里可以先排序再统计,时间复杂度为O(nlog(n))
源代码:
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> cnt;
unordered_map<int, int>::iterator it;
int len = nums.size();
for (int i = 0; i < len; ++i) {
cnt[nums[i]]++;
}
multimap<int, int, greater<int> > mmp;
for (it = cnt.begin(); it != cnt.end(); ++it) {
mmp.insert(pair<int, int>(it->second, it->first));
}
vector<int> res(k, 0);
multimap<int, int, greater<int> >::iterator mit;
int i = 0;
for (i = 0, mit = mmp.begin(); i < k; ++i, ++mit) {
res[i] = mit->second;
}
return res;
}
};