Leetcode - 347 Top K Frequent Elements (Medium)
题目描述:求数组中出现次数最多的 k 个元素。
Input: nums = [1,1,1,2,2,3], k = 2
Output: [1,2]
解题思路:桶排序,使用元素的出现频次作为下标。
public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer>[] bucket = new List[nums.length + 1];
Map<Integer, Integer> frequencyMap = new HashMap<>();
for (int num : nums) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 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 i = bucket.length - 1; i >= 0 && res.size() < k; i--) {
if (bucket[i] != null){
res.addAll(bucket[i]);
}
}
return res;
}