LeetCode: Top K Frequent Elements
2017-04-23 15:31
323 查看
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.
给一个非空的整数数组,返回k个最频繁的元素,算法时间复杂度要求低于O(nlogn)
解题思路:
考虑使用哈希表存储每个元素对应的出现次数,并利用桶排序的思想,将出现次数相同的元素放在同一个桶中。桶之间是有序的,最后从元素出现次数最多的桶开始遍历,取出其中元素,直到满足题目要求。算法时间复杂度为O(n)。
代码如下:
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个最频繁的元素,算法时间复杂度要求低于O(nlogn)
解题思路:
考虑使用哈希表存储每个元素对应的出现次数,并利用桶排序的思想,将出现次数相同的元素放在同一个桶中。桶之间是有序的,最后从元素出现次数最多的桶开始遍历,取出其中元素,直到满足题目要求。算法时间复杂度为O(n)。
代码如下:
public List<Integer> getTopKFrequent(int[] nums, int k) { List<Integer>[] bucket = new List[nums.length + 1]; Map<Integer, Integer> frequencyMap = new HashMap<Integer, Integer>(); for (int n : nums) { frequencyMap.put(n, frequencyMap.getOrDefault(n, 0) + 1); } for (int key : frequencyMap.keySet()) { int frequency = frequencyMap.get(key); if (bucket[frequency] == null) { bucket[frequency] = new ArrayList<>(); } bucket[frequency].add(key); } List<Integer> res = new ArrayList<>(); for (int pos = bucket.length - 1; pos >= 0 && res.size() < k; pos--) { if (bucket[pos] != null) { res.addAll(bucket[pos]); } } return res; }
相关文章推荐
- [leetcode]Top K Frequent Elements
- LeetCode[347] Top K Frequent Elements
- [Leetcode] #347 Top K Frequent Elements
- [leetcode-347]Top K Frequent Elements(java)
- [LeetCode] Top K Frequent Elements
- leetCode_Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- LeetCode|Top K Frequent Elements
- Leetcode_347_Top K Frequent Elements
- LeetCode:Top K Frequent Elements
- 频数相关的leetcode:451 Sort Characters By Frequency& 347 Top K Frequent Elements
- leetcode_347 Top K Frequent Elements
- LeetCode Top K Frequent Elements
- leetcode_c++:哈希:Top K Frequent Elements(347)
- [LeetCode]Top K Frequent Elements(Java)
- LeetCode--No.347--Top K Frequent Elements
- leetcode 347[medium]--Top K Frequent Elements
- [LeetCode] Top K Frequent Elements 前K个高频元素
- LeetCode-Top K Frequent Elements
- [LeetCode] Top K Frequent Elements