/*
* 347. Top K Frequent Elements
* 2016-7-11 by Mingyang
* 这个题目基本思路非常简单,就是把所有的值一个一个的放到Priority Queue里面去
* 然后继续一个一个的弹出来,关键的点是需要把May的每一个Entry都传入到queue里面
*/
public List<Integer> topKFrequent(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int num: nums){
map.put(num, map.containsKey(num)? map.get(num) + 1 : 1);
}
Queue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<Map.Entry<Integer, Integer>>(k,
new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> i1, Map.Entry<Integer, Integer> i2) {
return i2.getValue() - i1.getValue();
}
});
queue.addAll(map.entrySet());
List<Integer> res = new ArrayList<Integer>();
for(int i = 0; i < k; i++){
res.add(queue.poll().getKey());
}
return res;
}