赞
踩
题目:
思路:
维护一个最小堆,只保留需要的那前K个元素,利用nlargest 然后倒序排列,堆顶是最小就是K个元素中需要的答案,
每次添加元素(更新堆操作):当外部数值val < 堆顶元素时候,忽略不用管,因为它不会造成结果变化(前K个数字不受影响),当val>堆顶元素时候,需要heapreplace 踢出最小值,插入新的值,然后heapify新的值
最后结果,弹出最小值就ok
解答(没有自己写一个堆了,直接用heapq):
- class KthLargest:
-
- def __init__(self, k: int, nums):
- self.pool = heapq.nlargest(k, nums)[::-1]
- self.k = k
-
- def add(self, val: int) -> int:
- if len(self.pool) < self.k:
- heapq.heappush(self.pool, val)
- elif val > self.pool[0]:
- heapq.heapreplace(self.pool, val)
- return self.pool[0]
参考:
1)heapq
--- 堆队列算法: https://docs.python.org/zh-cn/3.9/library/heapq.html
2)https://www.youtube.com/watch?v=yaMwem1K75c
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。