【优先级队列(堆)】2.数据流中的第 K ⼤元素(easy)

优先级队列(堆)

2.数据流中的第 K ⼤元素(easy)

题⽬链接:703. 数据流中的第 K ⼤元素

题⽬描述:

设计⼀个找到数据流中第 k ⼤元素的类(class)。注意是排序后的第 k ⼤元素,不是第 k 个不同的元素。

请实现 KthLargest 类:

KthLargest(int k, int[] nums) 使⽤整数 k 和整数流 nums 初始化对象。

int add(int val) 将 val 插⼊数据流 nums 后,返回当前数据流中第 k ⼤的元素。

⽰例:

输⼊:

"KthLargest", "add", "add", "add", "add", "add"

\[3, \[4, 5, 8, 2\]\], \[3\], \[5\], \[10\], \[9\], \[4\]

输出:

null, 4, 5, 5, 8, 8

解释:

KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);

kthLargest.add(3); // return 4

kthLargest.add(5); // return 5

kthLargest.add(10); // return 5

kthLargest.add(9); // return 8

kthLargest.add(4); // return 8

提⽰:

1 <= k <= 10^4

0 <= nums.length <= 10^4

-104 <= nums[i] <= 10^4

-104 <= val <= 10^4

最多调⽤ add ⽅法 10^4 次

题⽬数据保证,在查找第 k ⼤元素时,数组中⾄少有 k 个元素

解法(优先级队列):

算法思路:

我相信,看到 TopK 问题的时候,兄弟们应该能⽴⻢想到「堆」,这应该是刻在⻣⼦⾥的记忆。

算法代码:

java 复制代码
class KthLargest
{
 // 创建⼀个⼤⼩为 k 的⼩根堆
 PriorityQueue<Integer> heap;
 int _k;
 public KthLargest(int k, int[] nums) 
 {
	 _k = k;
	 heap = new PriorityQueue<>();
	 for(int x : nums)
	 {
		 heap.offer(x);
		 if(heap.size() > _k)
		 {
		 	heap.poll();
		 }
	 }
 }
 
 public int add(int val) 
 {
	 heap.offer(val);
	 if(heap.size() > _k)
	 {
	 	heap.poll();
	 }
	 return heap.peek();
 }
}
/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest obj = new KthLargest(k, nums);
 * int param_1 = obj.add(val);
 */
相关推荐
傅科摆 _ py4 小时前
Vscode 如何配置远程环境的 ssh 连接
ide·vscode·编辑器·1024程序员节
Matlab程序猿小助手4 小时前
【MATLAB源码-第303期】基于matlab的蒲公英优化算法(DO)机器人栅格路径规划,输出做短路径图和适应度曲线.
开发语言·算法·matlab·机器人·kmeans
CoderIsArt4 小时前
CORDIC三角计算技术
人工智能·算法·机器学习
立志成为大牛的小牛4 小时前
数据结构——二十九、图的广度优先遍历(BFS)(王道408)
数据结构·数据库·学习·程序人生·考研·算法·宽度优先
Alex艾力的IT数字空间4 小时前
基于PyTorch和CuPy的GPU并行化遗传算法实现
数据结构·人工智能·pytorch·python·深度学习·算法·机器学习
仰泳的熊猫4 小时前
LeetCode:51. N 皇后
数据结构·c++·算法·leetcode
独自破碎E4 小时前
LeetCode 381: O(1) 时间插入、删除和获取随机元素 - 允许重复
java·算法·leetcode
Miraitowa_cheems5 小时前
LeetCode算法日记 - Day 81: 最大子数组和
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
颜夕啊5 小时前
Windows系统php8.2.9 安装imagick扩展
php·1024程序员节