class Solution {
public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer> res = new ArrayList<>();
if(nums == null || nums.length == 0)
return res;
Map<Integer,Integer> map = new HashMap<>();
for(int x : nums){
map.put(x,map.getOrDefault(x,0)+1);
}
// PriorityQueue<Map.Entry<Integer,Integer>> queue = new PriorityQueue<>(
// new Comparator<Map.Entry<Integer,Integer>>(){
// public int compare(Map.Entry<Integer,Integer> e1, Map.Entry<Integer,Integer> e2){
// return e1.getValue() - e2.getValue();
// }
// }
// );
PriorityQueue<Map.Entry<Integer,Integer>> queue = new PriorityQueue<>((e1,e2) -> e1.getValue() - e2.getValue());
// PriorityQueue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<Map.Entry<Integer, Integer>>(
// new Comparator<Map.Entry<Integer, Integer>>() {
// public int compare(Map.Entry<Integer, Integer> e1, Map.Entry<Integer, Integer> e2) {
// return e1.getValue() - e2.getValue();
// }
// });
//better than n logn ,不是每一个都要插入queue
for(Map.Entry<Integer,Integer> e : map.entrySet()){
if(queue.size() < k){
queue.offer(e);
}else{
if(queue.peek().getValue() < e.getValue()){
queue.poll();
queue.offer(e);
}
}
}
for(Map.Entry<Integer,Integer> e: queue){
res.add(e.getKey());
}
return res;
}
}