题目
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
说明:
你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。
思路
1、哈希映射。将数组元素放入map中,value表示计数;然后对map按照value从大到小排序,最后将前k个元素存入数组中。
实现方法
一、哈希映射。
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int> m;
vector<int> res;
vector<pair<int,int>> temp;
for(int k:nums){ //将数组元素放入map中,value表示计数
m[k]++;
}
for(auto it=m.begin();it!=m.end();++it){ //对map按value从大到小排序
temp.push_back(make_pair(it->first,it->second));
}
sort(temp.begin(),temp.end(),[](const pair<int,int> &x,const pair<int,int> &y)->int {
return x.second>y.second;
});
for(auto it=temp.begin();it!=temp.begin()+k;++it){ //按次数从大到小排序后,输出前k个数
res.push_back(it->first);
}
return res;
}
};