[leetcode] 347. Top K Frequent Elements
2016-08-01 05:34
309 查看
Given a non-empty array of integers, return the k most frequent elements.
For example,
Given
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.
解法一:
这里要考察两点:1)怎么获取hash table中valid的值,用for(auto it:m)。另外,如果使用c++的priority queue,问题就会变得简单。
解法二:
这个方法思路就是把数据以frequence为id存在一个bucket里面。最后从后往前从bucket里读取k个数值。
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.
解法一:
这里要考察两点:1)怎么获取hash table中valid的值,用for(auto it:m)。另外,如果使用c++的priority queue,问题就会变得简单。
class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> m; priority_queue<pair<int,int>> q; //frequence, value for(auto a:nums) ++m[a]; for(auto it:m) q.push({it.second,it.first}); vector<int> res; for(int i=0; i<k; ++i){ res.push_back(q.top().second); q.pop(); } return res; } };
解法二:
这个方法思路就是把数据以frequence为id存在一个bucket里面。最后从后往前从bucket里读取k个数值。
class Solution { public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> m; for(auto a:nums) ++m[a]; vector<vector<int>> bucket(nums.size() + 1); for(auto it:m){ bucket[it.second].push_back(it.first); } vector<int> res; for (int i = nums.size(); 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; } };
相关文章推荐
- LeetCode 347. Top K Frequent Elements 优先队列的使用及注意事项
- [leetcode] 347. Top K Frequent Elements
- LeetCode:347. Top K Frequent Elements
- LeetCode | 347. Top K Frequent Elements 优先队列技巧题
- leetcode 347. Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- [leetcode] 347. Top K Frequent Elements
- 【LeetCode】347. Top K Frequent Elements 解题报告
- leetcode_347. Top K Frequent Elements 找出现频率最高的前k个元素
- [leetcode]347. Top K Frequent Elements -- JavaScript 代码
- LeetCode 347. Top K Frequent Elements (Medium)
- LeetCode 【347. Top K Frequent Elements】
- 【LeetCode】 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements
- LeetCode347. Top K Frequent Elements
- [leetcode]347. Top K Frequent Elements
- Leetcode 347. Top K Frequent Elements
- LeetCode #347. Top K Frequent Elements
- leetcode 347. Top K Frequent Elements
- LeetCode 347. Top K Frequent Elements 题解(C++)