703. 数据流中的第 K 大元素 - 力扣(LeetCode)
你可以使用最小堆(小顶堆)来高效地维护数据流中的第 k 大元素。Python 的 heapq
模块非常适合这个任务。下面是 KthLargest
类的实现:
import heapq
class KthLargest:
def __init__(self, k: int, nums: list[int]):
self.k = k
self.min_heap = []
for num in nums:
self.add(num) # 初始化时调用 add 方法,保持堆的大小为 k
def add(self, val: int) -> int:
if len(self.min_heap) < self.k:
heapq.heappush(self.min_heap, val)
elif val > self.min_heap[0]:
heapq.heappushpop(self.min_heap, val)
return self.min_heap[0] # 堆顶元素即为第 k 大元素
解释:
-
初始化:
-
用
heapq
维护一个小顶堆self.min_heap
。 -
逐个插入
nums
中的元素,确保堆的大小最多为k
。
-
-
add
方法:-
若堆的大小小于
k
,直接插入val
。 -
若
val
大于堆顶元素(即当前第 k 大的元素),替换堆顶,保持堆的大小为k
。 -
返回堆顶元素,即当前第 k 大的元素。
-
这种方法的 add
操作的时间复杂度为 O(log k)
,适用于处理动态数据流的情况。