堆:
完全二叉树
-
最大堆: 每个节点 >= 孩子节点
-
最大值: 堆顶元素
-
最小堆: 每个节点 <= 孩子节点
-
最小值: 堆顶元素
时间复杂度
- 访问Access —
- 搜索Search — O(1) — 堆顶元素
- 插入Insert — O(logN)
- 删除Delete — O(logN) — 堆顶元素
堆化
把一组无序的数加到堆里去
O(N) + O(N)
常用操作
-
创建堆(最大堆/最小堆)
import heapq
minheap = []
heapq.heapify(minheap) — 堆化
– -
添加元素
heapq.heappush(minheap, 10)
heapq.heappush(minheap, 2)
(添加的元素)
–
- 查看堆顶元素
print(minheap[0])
–
- 删除堆顶元素
s.remove(2)
heapq.heappop(minheap)
–
- 堆的长度
len(minheap)
O(1)
- 堆的遍历
while len(minheap) != 0:
print(heapq.heappop(minheap))
边遍历边删除
python中只能创建最小堆
创建最大堆—元素带负号
练习题
-
215 . 数组中第K个最大元素
-
692 . 前K个高频单词
学习视频来源B站—爱学习的饲养员—手把手带你刷Leetcode力扣