力扣 347. 前 K 个高频元素

🔗 https://leetcode.cn/problems/top-k-frequent-elements

题目

  • 给一个数组,返回其中出现频率前 K 高的数字

思路

  • 统计数组中数字出现的频率
  • 优先队列,建立大小为 k 的小根堆,根据数字出现的频率排序
  • 更新并维护该优先队列,便是前 K 个高频元素

代码

cpp 复制代码
class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> m;
        for (auto num : nums) {
            m[num]++;
        }

        auto minHeapCompare = [](pair<int, int> left, pair<int, int> right) {
		return left.second > right.second; // 自定义比较器,建立最小堆
};
std::priority_queue<pair<int, int>, std::vector<pair<int, int>>, decltype(minHeapCompare)>
            heap(minHeapCompare);

        for (auto item : m) {
            if (heap.size() < k) {
                pair<int, int> p = make_pair(item.first, item. second);
                heap.push(p);
                continue;
            }
            if (item.second > heap.top().second) {
                heap.pop();
                pair<int, int> p = make_pair(item.first, item. second);
                heap.push(p);
            }

            
        }

        vector<int> ans;
        while (heap.empty() == false) {
            ans.push_back(heap.top().first);
            heap.pop();
        }
        return ans;
    }
};
相关推荐
?abc!22 分钟前
(数组)448. 找到所有数组中消失的数字
算法
淡海水23 分钟前
05-03-源码-Boehm GC分配与碎片管理
开发语言·算法·unity·c#·游戏引擎·gc
青少儿编程课堂41 分钟前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C/C++考级:任意进制互转与大数多进制加法解析
c++·python·算法·bfs·信息学竞赛
多弗朗皮卡丘1 小时前
C++ 哈希(下)
c++·算法·哈希算法
aichitang20241 小时前
Meta Muse Spark Open:816B 巨型开放权重多模态 Agent 模型架构、部署实战与社区首测全解
大数据·人工智能·python·算法·ai·架构·spark
Coder-magician2 小时前
图论总结篇
算法·图论
有同事要进步2 小时前
Leecode第68题:x的平方根
java·数据结构·算法
吹什么轩2 小时前
linux系统复习:进程优先级与O(1)调度
java·linux·算法
开开心心就好2 小时前
安卓PDF处理工具,免费无广告零弹窗
android·服务器·开发语言·算法·pdf·ocr
zyl76518 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法