"""
Python堆:heap 三角形机制
类别:大堆 :pop的时候取的永远是最大值 小堆:pop的时候取的永远是最小值
Python表示:heapq包,在Java中是priorityQueue包
from heapq import heapify, heappush, heappop
heapify(): 默认是小堆 heappush(): heappop():默认删除最小值 heaplargest():前n个最大的值
heapsmallest():前n个最小的值
大堆:Python没有内置包支持大堆,
应用场景:前k个值的题目
"""
from heapq import heapify, heappush, heappop, nlargest, nsmallest
a = [1, 2, 3]
# 1. 小堆
heapify(a)
print(a)
# 2. 添加
heappush(a, 4)
# [1, 2, 3, 4] 头永远是是最小的值,后面不确定
print(a)
# 3. 删除
heappop(a)
print(a)
# 4. nlargest()
print(nlargest(2, a))
# 5. nsmallest()
print(nsmallest(2, a))
print("=" * 10)
# 1. 大堆
a2 = [1, 2, 3]
print(a)
a2 = [-i for i in a2]
print(a)
heapify(a2)
print(a2)
# 2. heappush()
j = 4
heappush(a2, -1 * j)
print(a2)
# 43. heappush()
print(heappop(a2) * -1)
print(a2)
结果
C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python.exe D:/code/datastruct/caozuo/demo06_heap.py
[1, 2, 3]
[1, 2, 3, 4]
[2, 4, 3]
[4, 3]
[2, 3]
==========
[2, 4, 3]
[2, 4, 3]
[-3, -2, -1]
[-4, -3, -1, -2]
4
[-3, -2, -1]
Process finished with exit code 0