题目描述
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。
来源,leetcode 每日一题 347. 前 K 个高频元素
例如:
输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
输入: nums = [1], k = 1
输出: [1]
解题思路
思路很简单,先统计频率,然后按照频率排序。输出前K个就可以了。
代码
class Solution {
public:
static bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
return a.second > b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int, int> freq;
for(int i = 0; i < nums.size(); i++) {
freq[nums[i]] += 1;
}
vector<pair<int, int>> vec(freq.begin(), freq.end());
sort(vec.begin(), vec.end(), cmp);
vector<int> answer;
for (int count = 0; count < k; count++) {
answer.push_back(vec[count].first);
}
return answer;
}
};
关键点:
使用map:
map<int, int> freq;
- map转换成vector排序:
vector<pair<int, int>> vec(freq.begin(), freq.end());
- vector排序: 需要自定义排序规则:
cmp
函数。