题目描述
给定一个非空的整数数组,返回其中出现频率前 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函数。
