pop python3_python3 -- 堆(heapq)

堆是一个二叉树,其中每个父节点的值都小于或等于其所有子节点的值。整个堆的最小元素总是位于二叉树的根节点。

python的heapq模块提供了对堆的支持。这个模块实现的是小顶堆

堆数据结构最重要的特征是heap[0]永远是最小的元素

1.heapq.heappush(heap,item)

注:heap为定义堆,item增加的元素

2.heapq.heapify(list)

将列表转换为堆

3.heapq.heappop(heap)

注:删除最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素。

4.heapq.heapreplace(heap.item)

注:删除最小元素值,添加新的元素值

5.heapq.nlargest(n,heap)

注:查询堆中的最大元素,n表示查询元素个数

6.heapq.nsmallest(n,heap)

注:查询堆中的最小元素,n表示查询元素的个数

leetcode练习题:

class Solution:

def getLeastNumbers(self, arr: List[int], k: int) -> List[int]:

if k == 0:

return list()

hp = [-x for x in arr[:k]]

heapq.heapify(hp)

for i in range(k, len(arr)):

if -hp[0] > arr[i]:

heapq.heappop(hp)

heapq.heappush(hp, -arr[i])

ans = [-x for x in hp]

return ans

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值