前 K 个高频元素
力扣题目链接
题目描述
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。
解题思路
又是遇到折磨人的题目,思路还算清晰,就是不好写。对我来说,主要难点就是对哈希表进行排序。
先用哈希表把所有的数据记录下出现的次数,然后存放在pair数组中进行排序,取前k个。
题解
#include<algorithm>
class Solution {
static bool cmp(pair<int, int> x, pair<int, int> y){
return x.second > y.second;
}
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> ans(k, 0);
unordered_map<int, int> um;
for (int i = 0; i < nums.size(); i++) {
um[nums[i]]++;
}
vector<pair<int, int>> v(um.begin(), um.end());
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < k; i++) {
ans[i] = v[i].first;
}
return ans;
}
};
总结
主要还是学会了sort函数的很多用法。