0
点赞
收藏
分享

微信扫一扫

347. Top K Frequent Elements**

347. Top K Frequent Elements**

​​https://leetcode.com/problems/top-k-frequent-elements/​​

题目描述

Given a non-empty array of integers, return the ​​k​​ most frequent elements.

Example 1:

Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
Example 2:

Input: nums = [1], k = 1
Output: [1]

Note:

  • You may assume k is always valid,​​1 ≤ k ≤ number of unique elements​​.
  • Your algorithm’s time complexity must be better than​​O(n log n)​​​, where​​n​​ is the array’s size.

C++ 实现 1

哈希表统计个数, 最小堆取 TopK.

class Solution {
private:
struct Comp {
bool operator()(const pair<int, int> &p, const pair<int, int> &q) {
return p.second > q.second;
}
};
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> record;
for (auto &n : nums) record[n] ++;
priority_queue<pair<int, int>, vector<pair<int, int>>, Comp> q;
for (auto &p : record) {
q.push(p);
if (q.size() > k) q.pop();
}
vector<int> res;
while (!q.empty()) {
res.push_back(q.top().first);
q.pop();
}
return res;
}
};

C++ 实现 2

哈希表统计个数, 最大堆取 TopK.

class Solution {
private:
struct Comp {
bool operator() (const pair<int, int> &p, const pair<int, int> &q) {
return p.second < q.second;
}
};
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> record;
for (auto &n : nums) record[n] ++;
priority_queue<pair<int, int>, vector<pair<int, int>>, Comp> q;
for (auto &p : record) q.push(p);
vector<int> res;
while (k--) {
auto p = q.top();
q.pop();
res.push_back(p.first);
}
return res;
}
};

举报

相关推荐

0 条评论