题目:
给你一个整数数组 nums
和一个整数 k
,请你返回其中出现频率前 k
高的元素。你可以按 任意顺序 返回答案。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:输入: nums = [1], k = 1
输出: [1]
解题思路:
- 统计出nums内数字出现的频率
- 把这些频率从高到低排序
- 输出到结果向量内
第一点可以通过一个map容器轻松解决
map<int,int> mp;
for(int i (0) ; i<nums.size(); i++)
{
mp[nums[i]]++;
}
第二点要把频率进行一个排序,那么可以借助vector的sort
struct Cmpvale{
bool operator()(const pair<int,int>&l, const pair<int,int>&r)
{
return l.second> r.second;
}
};
vector<pair<int,int>> tmp(mp.begin(), mp.end());//初始化向量
sort(tmp.begin(), tmp.end(), Cmpvale()); // 重载sort比较
第三点把前k个频率最高的key值输出
for(int i(0); i< k; i++)
{
res.push_back(tmp[i].first);
}
return res;