• 题目要求:

image.png

  • 思路:

    • 维护一个小根堆(父节点的值小于或等于子节点的值),小根堆拥有的节点数量是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

Adrianna
1 声望2 粉丝