311.LeetCode | 347. 前 K 个高频元素

Posted 每天一个开发小知识

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了311.LeetCode | 347. 前 K 个高频元素相关的知识,希望对你有一定的参考价值。

每天一个开发小知识


01


题目

给你一个整数数组 nums 和一个整数 k

返回其中 出现频率前 k 高的元素

你可以按任意顺序返回答案

02

思路

取 top 数据可以使用最大(小)堆

由于比较两个元素的时候并不是比较元素本身的大小

而是元素出现的次数

所以需要 自定义比较函数

bool operator < (const struct Node & r) const{ return count > r.count; // 构造最小堆}

03

解法:自定义比较函数

时间复杂度 O(nlogn),空间复杂度 O(n)

class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int, int> m; for (auto iter : nums) { if (1 == m.count(iter)) { m[iter]++; } else { m[iter] = 1; } }
priority_queue<struct Node> queue;
for (auto iter : m) { struct Node node(iter.first, iter.second);
if (queue.size() < k) { queue.push(node); } else { if (queue.top().count < node.count) { queue.pop(); queue.push(node); } } }
vector<int> ret; while (!queue.empty()) { ret.push_back(queue.top().num); queue.pop(); } return ret; }
struct Node { Node(const int & n, const int & c) { num = n; count = c; }
bool operator < (const struct Node & r) const { return count > r.count; }
int num; int count; };};

相似题目



每天一个开发小知识,今天你学废了吗?


以上是关于311.LeetCode | 347. 前 K 个高频元素的主要内容,如果未能解决你的问题,请参考以下文章

347. 前 K 个高频元素

力扣347——前 K 个高频元素

[LeetCode]347. 前 K 个高频元素(堆)

OJ | 力扣347输出前 K 个高频元素

347. 前 K 个高频元素

347 Top K Frequent Elements 前K个高频元素