【手把手带你刷Leetcode力扣】9.数据结构 -堆

堆:

完全二叉树

  • 最大堆: 每个节点 >= 孩子节点

  • 最大值: 堆顶元素

  • 最小堆: 每个节点 <= 孩子节点

  • 最小值: 堆顶元素


时间复杂度

  • 访问Access —
  • 搜索Search — O(1) — 堆顶元素
  • 插入Insert — O(logN)
  • 删除Delete — O(logN) — 堆顶元素

堆化

把一组无序的数加到堆里去
O(N) + O(N)


常用操作

  1. 创建堆(最大堆/最小堆)
    import heapq
    minheap = []
    heapq.heapify(minheap) — 堆化

  2. 添加元素
    heapq.heappush(minheap, 10)
    heapq.heappush(minheap, 2)
    (添加的元素)

  1. 查看堆顶元素
    print(minheap[0])

  1. 删除堆顶元素
    s.remove(2)
    heapq.heappop(minheap)

  1. 堆的长度
    len(minheap)
    O(1)

  1. 堆的遍历
    while len(minheap) != 0:
    print(heapq.heappop(minheap))
    边遍历边删除

python中只能创建最小堆
创建最大堆—元素带负号

练习题

  • 215 . 数组中第K个最大元素

  • 692 . 前K个高频单词


学习视频来源B站—爱学习的饲养员—手把手带你刷Leetcode力扣

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值