力扣hot100 前 K 个高频元素 小根堆 流 IntStream

Problem: 347. 前 K 个高频元素

文章目录

思路

👨‍🏫 参考

  • 小根堆(维护k个高频元素)
  • 遍历所有元素,当前堆大小 < k 或者 当前元素出现次数大于堆顶元素出现次数:替换掉堆顶元素

复杂度

⏰ 时间复杂度: O ( n log ⁡ k ) O(n\log{k}) O(nlogk)

🌎 空间复杂度: O ( n ) O(n) O(n)

Code

Java 复制代码
class Solution {
	public int[] topKFrequent(int[] nums, int k)
	{
//		将一个数组(nums)转换为一个 Map 对象,并计算数组中每个元素出现的次数。                       键            值         键冲突处理方案
		Map<Integer, Integer> map = IntStream.of(nums).boxed().collect(Collectors.toMap(e -> e, e -> 1, Integer::sum));
		PriorityQueue<Integer> heap = new PriorityQueue<>((o1, o2) -> {
			return map.get(o1) - map.get(o2);
		});// 存的是元素的值(只存 k 个最高频的元素)
		for (Integer x : map.keySet())
		{
			if (heap.size() < k)
				heap.add(x);
			else if (map.get(x) > map.get(heap.peek()))
			{
				heap.remove();//去掉最小的
				heap.add(x);//把较大的值加进去
			}
		}
		int[] res = new int[k];
		int idx = 0;
		while (!heap.isEmpty())
			res[idx++] = heap.poll();
		return res;
	}
}
相关推荐
天天进步20151 分钟前
Pixelle-Video 源码解析 #18:声音克隆功能:参考音频如何影响解说效果?
数据库·音视频
时凌云.6 分钟前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫30 分钟前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
布莱克6051 小时前
Redis 详解:从核心数据结构到高可用架构
数据库
203号居民1 小时前
LeetCode hot 100 — 25. K 个一组翻转链表
算法·leetcode·链表
广州灵眸科技有限公司1 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
冰暮流星2 小时前
mysql之左外连接与右外连接
数据库·sql
jyOverQ2 小时前
MySQL 联合索引怎么用?最左匹配原则到底是什么意思?
数据库·mysql
Nil2082 小时前
leetcode 78子集
数据结构·算法·leetcode
oradh2 小时前
Oracle enq: US - contention 等待事件总结
数据库·oracle