算法系列——前 K 个高频元素(Top K Frequent Elements)

Posted BridgeGeorge

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法系列——前 K 个高频元素(Top K Frequent Elements)相关的知识,希望对你有一定的参考价值。

题目

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

示例 1:

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

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

解答

哈希表 + 小顶堆 。

class Solution 
    public int[] topKFrequent(int[] nums, int k) 
        //hash表统计词频
        //堆中最终输出 最高频的 K个值
        //hash 表统计词频
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++)
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        
        //创建小顶堆 默认为小顶堆
          Queue<Map.Entry<Integer, Integer>> queue = new PriorityQueue<>((o1, o2) -> o1.getValue() - o2.getValue());
         for(Map.Entry<Integer,Integer> entry:map.entrySet())
               if(queue.size()<k)
                    queue.add(entry);
                    
               else if(entry.getValue()>queue.peek().getValue())
                   queue.poll();
                    queue.add(entry);
               
          
        //从堆中取得结果
        int[] result=new int[k];
        for(int i=0;i<k;i++)
            result[i]=queue.poll().getKey();
        
        
         return result;
    



 

以上是关于算法系列——前 K 个高频元素(Top K Frequent Elements)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 0347. 前 K 个高频元素

311.LeetCode | 347. 前 K 个高频元素

⭐算法入门⭐《哈希表》中等04 —— LeetCode 347. 前 K 个高频元素

前 K 个高频元素告诉你桶排序有啥用

前K个高频元素

力扣347——前 K 个高频元素