桶排序:找出出现次数大于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;
}
思想挺容易,有点小地方需要注意;感觉重点是这些数据结构的使用。