题目描述:
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/top-k-frequent-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
首先遍历整个数组,并记录每个数字出现的次数,形成一个以数字元素为key值,出现次数为value的map数组,然后定义一个新的排序函数,是根据map的value值进行降序。
之后再访问map的前k个元素即可
typedef pair<int,int>PAIR;
//这里没办法写成bool cmp(unordered_map<int,int>& m1,unordered_map<int,int>& m2)
//会报错:error: no member named 'second' in 'std::unordered_map<int, int, std::hash<int>,
bool cmp(const PAIR& m1,const PAIR& m2)
{
return m1.second>m2.second;
}
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int,int>map;
vector<int>res;
for(int i=0;i<nums.size();i++)
{
map[nums[i]]++;
}
//必须定义一个新的数组
vector<PAIR>vec(map.begin(),map.end());
//对新数组按照value进行排序;
sort(vec.begin(),vec.end(),cmp);
for(int i=0;i<k;i++)
{
res.push_back(vec[i].first);
}
return res;
}
};