Top K Frequent Elements
来源:互联网 发布:复杂网络画图 编辑:程序博客网 时间:2024/05/16 17:34
题目
Given a non-empty array of integers, return the k most frequent elements.For example,Given [1,1,1,2,2,3] and k = 2, return [1,2].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.
思路
先统计每个元素出现次数,然后取前k个出现最多元素
一般用hash表统计,用最大堆取前k个
cpp
class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { vector<pair<int, int>> numCount; sort(nums.begin(),nums.end()); for (auto i : nums) { if (numCount.empty() || numCount.back().first != i) numCount.push_back({ i, 1 }); else//numCount.back.first==i numCount.back().second++; } sort(numCount.begin(), numCount.end(), [](pair<int,int> &left,pair<int,int> &right){ return left.second > right.second; }); vector<int> ret; for (size_t i = 0; i < k; ++i) ret.push_back(numCount[i].first); return ret; }};//hash表加最大堆class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; unordered_map<int, int> cnt; for (auto num : nums) cnt[num]++; for (auto kv : cnt) { pq.push({kv.second, kv.first}); while (pq.size() > k) pq.pop(); } vector<int> res; while (!pq.empty()) { res.push_back(pq.top().second); pq.pop(); } return res; }};//hash加bucketclass Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { vector<int> res; if (!nums.size()) return res; unordered_map<int, int> cnt; for (auto num : nums) cnt[num]++; vector<vector<int>> bucket(nums.size() + 1); for (auto kv : cnt) { bucket[kv.second].push_back(kv.first); } for (int i = bucket.size() - 1; i >= 0; --i) { for (int j = 0; j < bucket[i].size(); ++j){ res.push_back(bucket[i][j]); if (res.size() == k) return res; } } return res; }};
python
from collections import Counterclass Solution(object): def topKFrequent(self, nums, k): """ :type nums: List[int] :type k: int :rtype: List[int] """ counter=Counter(nums).most_common(k) return [key for key,count in counter]
0 0
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- Top K Frequent Elements
- C#/.NET 基础学习
- C++第五次实验
- 34. Search for a Range
- Mac&iOS Socket
- Android ViewPager 循环轮播
- Top K Frequent Elements
- 源码解析ConcurrentHashMap
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
- IOS开发-利用绘图表示进度
- JS面向对象定义多个属性--object.defineProperties()方法
- [从头学数学] 第214节 带着计算机去高考(六)
- 记录阿里云被肉鸡的破解方法
- 验证(Javascript和正则表达式)
- 多个glBindBuffer和glDrawXXX 需要glBindVertexArray VAO指定