public List<Integer> topKFrequent(int[] nums, int k) {
List<Integer> list = new ArrayList<Integer>();
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
PriorityQueue<Map.Entry<Integer,Integer>> pq = 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();
}
});
for(int i=0;i<nums.length;i++){
if(!map.containsKey(nums[i])){
map.put(nums[i],1);
}
map.put(nums[i],map.get(nums[i])+1);
}
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
if(pq.size()<k){
pq.offer(entry);
}
else if(pq.peek().getValue()<entry.getValue()){
pq.poll();
pq.offer(entry);
}
}
for(Map.Entry<Integer,Integer> entry :pq)
list.add(entry.getKey());
return list;
}