【手把手带你刷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力扣


版权声明:本文为ZZBOOM_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。