class Solution {
public int[] topKFrequent(int[] nums, int k) {
// 1.建立hash表来存储每个元素以及它的频率
HashMap<Integer, Integer> num2Fre = new HashMap<Integer, Integer>();
for (int num : nums) {
num2Fre.put(num, num2Fre.getOrDefault(num, 0) + 1);
}
// 2.创建一个优先级队列,定义比较器
PriorityQueue<Integer> heap = new PriorityQueue<>(Comparator.comparingInt(num2Fre::get));
// 3.遍历num2Fre,只保留前k频率的数字
for (Integer i : num2Fre.keySet()) {
// 4.在添加的时候,会调用num2Fre.get方法, 根据频率排序
heap.add(i);
if (heap.size() > k) {
// 5. 如果heap的数据容量大于k,就从前面把频率最小的剔除
heap.poll();
}
}
int[] result = new int[k];
for (int i = 0; i < k; i++) {
result[i] = heap.poll();
}
return result;
}
}