题目:
给你一个整数数组 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;
该问题要求统计整数数组中各元素的频率,并返回频率最高的k个元素。解决方案是使用map来存储频率,然后用自定义排序函数对频率降序排序,最后将前k个高频元素加入结果向量。
1466

被折叠的 条评论
为什么被折叠?



