力扣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;
	}
}
相关推荐
程序员谷美7 分钟前
Mysql 性能优化:索引条件下推(ICP)
数据库·mysql·索引
Smark.26 分钟前
(leetcode算法题)769. 最多能完成排序的块
算法·leetcode
一心只为学28 分钟前
pgpool配置安装之服务器的配置
运维·数据库·postgresql·pgpool
Stark、33 分钟前
【Linux】文件系统--文件存储/软硬链接/inode/dentry
linux·运维·服务器·c语言·后端
杰克崔36 分钟前
linux上对于so库的调试——包含通过vs2019远程ssh调试so库
linux·运维·服务器
Gpluso_od44 分钟前
LeetCode -Hot100 - 73. 矩阵置零
算法·leetcode·矩阵
科技语者1 小时前
Linux常用的100种命令大集合
linux
jekc8681 小时前
Ubuntu更改内核
linux·运维·ubuntu
kong79069281 小时前
Linux系列(二)安装Linux和Linux目录结构
linux·运维·服务器
i-Java1 小时前
CentOS7安装redis
linux·redis·缓存·centos