347. Top K Frequent Elements

    /*
     * 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;
    }
原文地址:https://www.cnblogs.com/zmyvszk/p/5662966.html