算法系列——前 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)的主要内容,如果未能解决你的问题,请参考以下文章