- 题目要求:
-
思路:
- 维护一个小根堆(父节点的值小于或等于子节点的值),小根堆拥有的节点数量是k,保持小根堆始终有k个元素。
- 遍历数组,把当前元素加入到堆中,加入后判断堆的节点数量,如果大于k,把最小的元素取出,从堆中删除,这样保持堆中剩余的始终是最大的k个元素,堆顶是这些数字中最小的,也就是第k大的元素。
-
Python heapq参考:
- 核心代码:
# 小根堆用数组代替
res = []
# 遍历数组
for i in nums:
# 把当前元素添加到堆中,保持小根堆
heapq.heappush(res,i)
# 如果堆中的元素数量,也就是数组的长度大于k
if len(res) > k:
# 把堆顶元素取出,也就是把最小的元素取出堆
heapq.heappop(res)
# 如果res不为空,就返回res[0],如果res为空,说明最开始的数组就为空,返回None
return res[0] if res else None
- 完整代码:
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
res = []
for i in nums:
heapq.heappush(res,i)
if len(res) > k:
heapq.heappop(res)
return res[0] if res else None
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。