【leetcode刷题日记】347. 前 K 个高频元素

【leetcode刷题日记】347. 前 K 个高频元素

问题描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

示例

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

解法

class Solution {
    public int[] topKFrequent(int[] nums, int k) {

        HashMap<Integer,Integer> map = new HashMap<>();

        for(int num: nums){
            map.put(num, map.getOrDefault(num,0)+1);
        }

        PriorityQueue<int[]> queue = new PriorityQueue<>((pair1,pair2) -> pair1[1]-pair2[1]);

        for(Map.Entry<Integer,Integer> entry : map.entrySet()){

            if(queue.size() < k){
                queue.add(new int[]{entry.getKey(),entry.getValue()});
            }else{
                if(entry.getValue() > queue.peek()[1]){
                    queue.add(new int[]{entry.getKey(),entry.getValue()});
                    queue.poll();
                }
            }
        }

        int[] res = new int[k];

        for(int i = 0; i < k; i++){
            res[i] = queue.poll()[0];
        }

        return res;

    }
}

注意事项

  1. map 的实体对的遍历;
  2. 大顶堆小顶堆的用法;
  3. 比较器的用法;
posted @ 2023-01-27 17:29  小耳朵a  阅读(13)  评论(0)    收藏  举报