1.这是一道使用堆的题目,就是记录最大的前K个数,然后返回。
链接:https://leetcode.com/problems/kth-largest-element-in-a-stream/
703.kth-largest-element-in-a-stream.png这题很简单,就是每次输入一个数,然后每次都返回第K大的那个数。
我们使用最小堆,去保存最大的K个数,因为使用heapq函数,所以每次不需要管堆内部的操作。
ps:不用最大堆是因为内置的heapq函数只实现了最小堆。
2.题解:
import heapq
class KthLargest(object):
def __init__(self, k, nums):
nums.sort()
self.heap = nums[-k:] # 找出最大的k个
self.k = k
heapq.heapify(self.heap) # 放入堆中
def add(self, val):
# 如果堆没有填满
if len(self.heap) < self.k:
heapq.heappush(self.heap, val)
elif val >= self.heap[0]:
# 填满了,添加新的元素.
heapq.heappop(self.heap)
heapq.heappush(self.heap, val)
# print(self.heap[0])
return self.heap[0]
网友评论