LeetCode|Top K Frequent Elements
来源:互联网 发布:数据库范式举例 编辑:程序博客网 时间:2024/06/10 18:04
Top K Frequent Elements
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.
思路:
这道题与Kth Largest Element in an Array思路相同参考题解
- hash表用来统计出现的频率
- 分治法找到最大的K个数。利用快速排序partition的思想,每次把不小于pivot的数放左边,小于pivot的数放右边。最后判断一下pivot的下标与k-1的关系,然后返回pivot或者缩小范围继续递归。
空间复杂度为O(n),时间复杂度O( n log k)
class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int, int> um; // 空间O(n) val->num for(int i = 0; i < nums.size(); i++) um[nums[i]]++; // 时间O(n) vector< pair<int, int> > v;// 空间O(n) for(unordered_map<int, int>::iterator it = um.begin(); it != um.end(); it++){ // 时间O(n) int val = it->first; int num = it->second; v.push_back( std::pair<int, int>(val, num) ); } return helper(v, 0, v.size()-1, k); }private: vector<int> helper(vector<pair<int, int> >& v, int s, int e, int k){ int lastLarge = s; for(int i = s+1; i <= e; i++){ if(((v[i]).second) >= ((v[s]).second)) swap(v[++lastLarge], v[i]); } swap( v[s], v[lastLarge]); if(lastLarge == k-1) { vector<int> res; for(int i = 0; i < k; i++){ res.push_back(v[i].first); } return res; } if(lastLarge < k) return helper(v, lastLarge+1, e, k); // lastLarge < k-1 return helper(v, s, lastLarge-1, k); // lastLarge >= k }};
1 0
- LeetCode|Top K Frequent Elements
- 【Leetcode】Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- [LeetCode] Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- 【leetcode】Top K Frequent Elements
- LeetCode Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- leetcode:Top K Frequent Elements
- LeetCode Top K Frequent Elements
- leetcode Top K Frequent Elements
- LeetCode: Top K Frequent Elements
- LeetCode Top K Frequent Elements
- [LeetCode] Top K Frequent Elements
- LeetCode : Top K Frequent Elements
- Leetcode Top K Frequent Elements
- [leetcode]Top K Frequent Elements
- LeetCode: Top K Frequent Elements
- 实现线程的两种方式
- net user
- c语言简易计算器
- 将属性文件以key-value值形式输出的工具类
- Problem B: 迭代法求平方根
- LeetCode|Top K Frequent Elements
- java为什么要使用接口回调
- DFS模板Oil Deposits
- JavaScript 不用eval制作简易计算器
- Linux下undefined reference to ‘pthread_create’问题解决
- android自定义View之复合控件
- LeetCode Copy List with Random Pointer
- Problem C: 小球自由下落
- 【BZOJ1934】【codevs2341】善意的投票,二分图最小割