设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。
你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream
这题用Python的内置函数来做,几行代码就OK了,但这样做的话,就没意思了。
这题我用了小根堆的性质来做,因为求第K大元素,即只要维持一个空间大小为K的小根堆,那么堆顶就是所求的答案。
class KthLargest:
def __init__(self, k: int, nums: List[int]):
#建堆,构造小根堆
self.nums = nums
self.length = len(nums)
self.k = k
m = self.length
#把序列的逻辑结构看做一颗完全二叉树
'''i为当前节点,2*i+1是i的左孩子,2*i+2是i的右孩子'''
r = m // 2