题目描述

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

来源,leetcode 每日一题 347. 前 K 个高频元素

例如:


    1. 输入: nums = [1,1,1,2,2,3], k = 2
    2. 输出: [1,2]

    1. 输入: nums = [1], k = 1
    2. 输出: [1]

    解题思路

  1. 思路很简单,先统计频率,然后按照频率排序。输出前K个就可以了。

    代码

    1. class Solution {
    2. public:
    3. static bool cmp(const pair<int, int>& a, const pair<int, int>& b) {
    4. return a.second > b.second;
    5. }
    6. vector<int> topKFrequent(vector<int>& nums, int k) {
    7. map<int, int> freq;
    8. for(int i = 0; i < nums.size(); i++) {
    9. freq[nums[i]] += 1;
    10. }
    11. vector<pair<int, int>> vec(freq.begin(), freq.end());
    12. sort(vec.begin(), vec.end(), cmp);
    13. vector<int> answer;
    14. for (int count = 0; count < k; count++) {
    15. answer.push_back(vec[count].first);
    16. }
    17. return answer;
    18. }
    19. };

    关键点:

  2. 使用map: map<int, int> freq;

  3. map转换成vector排序: vector<pair<int, int>> vec(freq.begin(), freq.end());
  4. vector排序: 需要自定义排序规则: cmp 函数。