/* * 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; }