力扣刷题记录 -- JAVA--37--347. 前 K 个高频元素

目录

  • 一、题目
  • 二、代码
  • 三、运行结果


一、题目

力扣刷题记录 -- JAVA--37--347. 前 K 个高频元素_第1张图片

二、代码

class Solution 
{
    public int[] topKFrequent(int[] nums, int k) 
    {
        //题解中学习得到
        //优先级队列,为了避免复杂api操作,pq存储数组
        //lambda 表达式设置优先级队列从大到小存储 o1-o2为 小顶堆,小的弹出  o2-o1 大顶堆,大的弹出
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1,o2)->o1[1]-o2[1]);
        int[] res = new int[k];
        Map<Integer, Integer> map = new HashMap<>();
        for (int num: nums) map.put(num,map.getOrDefault(num,0)+1);
        for (var x: map.entrySet())
        {
            int[] temp = new int[2];
            temp[0] = x.getKey();
            temp[1] = x.getValue();         
            //自动排序
            pq.offer(temp);
            //自己维护大小
            if(pq.size()>k)
            {
                pq.poll();
            }
        }  
        for(int i=0; i<k; i++)
        {
            res[i]=pq.poll()[0];
        }
     
       
        return res;
    }
}

三、运行结果

力扣刷题记录 -- JAVA--37--347. 前 K 个高频元素_第2张图片

你可能感兴趣的:(#,leetcode,java,算法)