347. 前 K 个高频元素

小豆丁 1年前 ⋅ 990 阅读
347. 前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

 

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]
示例 2:

输入: nums = [1], k = 1
输出: [1]

解析

考察两点,一是对map的values进行排序;二是使用最大堆存储前k个

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        if(k<=0) return new int[0];
        int[] res = new int[k];
        if(nums==null||nums.length==0) return res;
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0 ; i<nums.length;i++){
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        PriorityQueue<Map.Entry<Integer,Integer>> heap = new PriorityQueue<>((o1,o2)->{return o2.getValue()-o1.getValue();});
        heap.addAll(map.entrySet());
        for(int i = 0 ; i < k;i++){
            Map.Entry<Integer,Integer> entry = heap.poll();
            res[i] = entry.getKey();
        }
        return res;
    }
}