Leetcode347.前K个高频元素

  • 题目:

Leetcode347.前K个高频元素

 

 

  •  思路

首先想到的是哈希表,用unordered_map存储每个元素出现的次数,再对次数进行排序,最后找到前k多个出现的元素即可。

代码:

class Solution {
public:
    static bool cmp(const pair<int, int> &lhs, const pair<int, int> &rhs) {
        return lhs.second > rhs.second;
    }

    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> map;
        for (int num : nums) {
            map[num]++;
        }

        vector<pair<int, int>> vec(map.begin(), map.end());
        sort(vec.begin(), vec.end(), cmp);
        vector<int> result;
        for (int i = 0; i < k; i++) {
            result.push_back(vec[i].first);
        }
        return result;
    }
};

首先将nums中的元素以及其出现的次数放入unordered_map中,然后unordered_map中的元素根据value值进行排序,最后输出前k个。

  • 注意

1.比较的函数前面需要加上static

    static bool cmp(const pair<int, int> &lhs, const pair<int, int> &rhs) {
        return lhs.second > rhs.second;
    }

2.unordered_map本身不能对value值进行排序,需要将其装换成vector再进行排序操作,代码如下

vector<pair<int, int>> vec(map.begin(), map.end());
  • 说明

被代码未优化,但优点在于比较清晰

上一篇:开发工具:让前后端联调不再争吵——Apifox


下一篇:你不知道的javascript (上卷) 笔记