leetcode 347 前k个高频词汇

前k个一般都用堆,前k个明显用大顶堆

 public int[] topKFrequent(int[] nums, int k) {
        HashMap map = new HashMap<>();
        int[] result = new int[k];
        for(int i = 0; i < nums.length; i++){
            Integer value = map.getOrDefault(nums[i], 0);
            map.put(nums[i],value + 1 );
        }
        //利用堆排序获得前k个最大的,所以实现大顶堆
        //参数是比较器,因为传入的是数组,数组第一个数是key,第二个数是value,所以第二个value - 第一个value看作大顶堆
        PriorityQueue queue = new PriorityQueue<>((a,b) -> b[1] - a[1]);
        for (Map.Entry entry : map.entrySet()) {
            queue.offer(new int[]{entry.getKey(),entry.getValue()});
        }
        for(int i = 0; i < k; i++)
            result[i] = queue.poll()[0];
        return result;
    }

你可能感兴趣的:(leetcode,算法,数据结构)