资讯详情

leetcode 347前k个高频元素

📅 2026/10/5 9:13:25 | 华诺云谱 👁 阅读
leetcode 347前k个高频元素
class Solution { public: // 按出现次数构造小顶堆 static bool cmp(pairint,int m, pairint,int n) { return m.second n.second; } vectorint topKFrequent(vectorint nums, int k) { // 统计数字 - 出现次数 unordered_mapint,int orders; for (auto v : nums) { orders[v]; } // 创建自定义小顶堆 priority_queue pairint,int, vectorpairint,int, decltype(cmp) q(cmp); // 维护出现次数最大的 k 个元素 for (auto [num, count] : orders) { if (q.size() k) { // 新元素频率更大替换堆顶 if (q.top().second count) { q.pop(); q.emplace(num, count); } } else { // 堆未满直接加入 q.emplace(num, count); } } // 取出堆中的数字 vectorint res; while (!q.empty()) { res.push_back(q.top().first); q.pop(); } return res; } };总结这题分为三步① 哈希表统计频率orders[v];得到数字 → 出现次数② 小顶堆维护前 K 个高频元素cmp保证q.top()始终是当前堆中出现次数最少的元素。堆满以后如果q.top().second count说明新元素频率更高就q.pop(); // 淘汰当前最小频率 q.emplace(num, count); // 加入新元素③ 最终堆中剩下的就是前 K 个高频元素。复杂度统计频率是O(n)维护堆约为O(n log k)整体O(n log k)堆的大小始终不超过k。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑