桶排序:找出出现次数大于K的数字:
public static List<Integer> topKFrequent(int[] nums, int k) {
List<Integer>[] bucket = new List[nums.length+1];//桶,list数组,为每个次数建一个list。一定要+1.否则当nums全为一个数时后面会越界
Map<Integer, Integer> fre = new HashMap<Integer, Integer>();
for(int val:nums)
fre.put(val, fre.getOrDefault(val, 0)+1);
for(int key:fre.keySet())
{
int frequency = fre.get(key);
System.out.println(frequency+" "+nums.length);
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]);
}
for(int val:res)
System.out.print(val+",");
return res;
}
思想挺容易,有点小地方需要注意;感觉重点是这些数据结构的使用。

本文介绍了一种利用桶排序算法找出数组中出现次数超过给定阈值K的数字的方法。通过构建桶数组和频率映射,算法能有效地统计每个数字的出现频率,并将频率大于等于K的数字收集到结果列表中返回。
837

被折叠的 条评论
为什么被折叠?



