题目描述
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
示例 1:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:
输入: nums = [1], k = 1
输出: [1]
问题分析
1.hashmap nums
2.将map中的key和value保存至vetcor.second和vector.first
3.sort自动比较根据vector.first从小到大排序
4.将k个元素插入nums中
5.取出后k个元素
解题思路1
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
//值,频率
unordered_map<int, int> map;
for (int i : nums) map[i]++;
vector<pair<int, int>> res;
//保存成频率,值
for (auto it : map) res.push_back(make_pair(it.second, it.first));
//根据频率排序,默认从小到大排列
sort(res.begin(), res.end());
for (int i = 1; i <=k; ++i) nums.push_back(res[res.size() - i].second);
//最后传入的五个值
return vector<int>(nums.end() - k, nums.end());
}
};
网友评论