class Solution {
public int[] topKFrequent(int[] nums, int k) {
// maxmium heap
Map<Integer, Integer> memo = new HashMap<>();
for(int value : nums){
memo.put(value, memo.getOrDefault(value, 0)+1);
}
int[] res = new int[k];
int index = 0;
// maxium heap
Queue<Integer> maxHeap = new PriorityQueue<>((a,b)->memo.get(b)-memo.get(a));
for(Integer key : memo.keySet()){
maxHeap.add(key);
if(maxHeap.size()==memo.size()-k+1){
res[index++]=maxHeap.poll();
}
}
return res;
}
}