题目来源
347. 前 K 个高频元素 - 力扣(LeetCode)
题目描述

代码
public int[] topKFrequent(int[] nums, int k) {
List<Integer>res=new ArrayList<>();//前k高频元素
HashMap<Integer,Integer>map=new HashMap<>();//元素-频次
for (int num : nums) {
if(map.containsKey(num)){
map.put(num,map.get(num)+1);
}else{
map.put(num,1);
}
}
//桶排序,初始置空桶(大小为nums.length+1)
List<Integer>[] bucket=new List[nums.length+1];
//在下标为频次的地方放入元素
map.forEach((key,value)->{
if(bucket[value]==null){
bucket[value]=new ArrayList<>();
}
bucket[value].add(key);
});
//从后往前遍历桶,将前k个高频元素放入res
for (int i = bucket.length-1; i >=0&&res.size()<k; i--) {
if(bucket[i]!=null){
res.addAll(bucket[i]);
}
}
return res.stream().mapToInt(Integer::valueOf).toArray();
}