347. 前 K 个高频元素

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例 1:

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

示例 2:

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

使用哈希表做映射,将 map 中的键值对转移到一个向量 pairs 中进行排序:

class Solution {
public:
    static bool compare(const pair<int, int>& a, const pair<int, int>& b) {
        return a.second > b.second; // 按照频率降序排序
    }   

    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> map;
        for(auto& num : nums){
            if(map.find(num) != map.end()){
                map[num] += 1;
            }else{
                map[num] = 1;
            }
        }
        vector<pair<int, int>> pairs;
        for(auto& entry : map){
            pairs.push_back(entry);
        }
        // sort(pairs.begin(), pairs.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
        //     return a.second > b.second;
        // }); // lambda表达式
        sort(pairs.begin(), pairs.end(), this->compare);
        vector<int> result;
        for(int i = 0; i < k && i < pairs.size(); i++){
            result.push_back(pairs[i].first);
        }
        return result;
    }
};

使用优先级队列来创建一个小顶堆:

class Solution {
public:
    struct mycomparison {
        bool operator()(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(auto& num: nums){
            map[num]++;
        }
        priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pri_que;
        for(auto& entry: map){
            pri_que.push(entry);
            if(pri_que.size() > k){ // 如果堆的大小大于了K,则队列弹出,保证堆的大小一直为k
                pri_que.pop();
            }
        }
        vector<int> result;
        // 找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒序来输出到数组
        for(int i = k - 1; i >= 0; i--){
            result.push_back(pri_que.top().first);
            pri_que.pop();
        }
        return result;
    }
};

相关推荐

  1. 347. K 高频元素

    2024-02-08 08:48:02       31 阅读
  2. 347. K 高频元素

    2024-02-08 08:48:02       34 阅读
  3. 347k高频元素

    2024-02-08 08:48:02       20 阅读
  4. Leetcode 347K高频元素

    2024-02-08 08:48:02       13 阅读
  5. 力扣 | 347. K 高频元素

    2024-02-08 08:48:02       35 阅读
  6. LeetCode Hot100 347.k高频元素

    2024-02-08 08:48:02       38 阅读
  7. 【排序算法】LeetCode-347. K 高频元素

    2024-02-08 08:48:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 08:48:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 08:48:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 08:48:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 08:48:02       20 阅读

热门阅读

  1. 【大数据面试题】004 Flink状态后端是什么

    2024-02-08 08:48:02       31 阅读
  2. 【Vue项目】filters过滤器

    2024-02-08 08:48:02       29 阅读
  3. List与数组相互转换

    2024-02-08 08:48:02       33 阅读
  4. 突破编程_C++_面试(基础知识(8))

    2024-02-08 08:48:02       29 阅读
  5. C语言:矩阵中的最小元素

    2024-02-08 08:48:02       28 阅读
  6. 51 单片机入门 400 例

    2024-02-08 08:48:02       26 阅读
  7. LeetCode 第28天

    2024-02-08 08:48:02       32 阅读
  8. 12.Swift字典

    2024-02-08 08:48:02       26 阅读