力扣每日一题day26[347. 前 K 个高频元素]

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= nums.length <= 105
  • k 的取值范围是 [1, 数组中不相同的元素的个数]
  • 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

这道题目主要涉及到如下三块内容:

  1. 要统计元素出现频率

  2. 对频率排序

  3. 找出前K个高频元素

统计元素出现次数可以使用map进行统计。

对频率进行排序可以使用优先级队列,优先级队列利用堆完成对元素的排序,这里使用小顶堆,因为小顶堆可以每次将最小的元素弹出,最后剩下前k个

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        int[] result=new int[k];
        Map map=new HashMap<>();
        for(int i=0;i> entries=map.entrySet();
        PriorityQueue> queue=new PriorityQueue<>((o1,o2)->o1.getValue()-o2.getValue());
        for(Map.Entry entry : entries){
            queue.offer(entry);
            if(queue.size()>k){
                queue.poll();
            }
        }
        for(int i=k-1;i>=0;i--){
            result[i]=queue.poll().getKey();
        }
        return result;
    }
}

你可能感兴趣的:(力扣每日一题,算法,leetcode,java)