class Solution {
public int[] topKFrequent(int[] nums, int 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);
}
}
PriorityQueue<Integer> heap = new PriorityQueue<>(
((o1, o2) -> map.get(o1) - map.get(o2))
);
for(int num : map.keySet()){
if(heap.size() < k ){
heap.add(num);
}
else if(map.get(num) > map.get(heap.peek())){
heap.poll();
heap.add(num);
}
}
int [] result = new int[heap.size()];
for (int i = 0; i < result.length; i++) {
result[i] = heap.poll();
}
return result;
}
}