Update code style for Python

This commit is contained in:
krahets
2023-03-03 03:07:22 +08:00
parent 7e9e6b000c
commit 7c501140f0
45 changed files with 274 additions and 266 deletions

View File

@ -6,7 +6,7 @@ Author: Krahets (krahets@163.com)
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from include import *
from modules import *
def test_push(heap, val, flag=1):
heapq.heappush(heap, flag * val) # 元素入堆
@ -18,6 +18,7 @@ def test_pop(heap, flag=1):
print(f"\n堆顶元素 {val} 出堆后")
print_heap([flag * val for val in heap])
""" Driver Code """
if __name__ == "__main__":
# 初始化小顶堆
min_heap, flag = [], 1

View File

@ -6,56 +6,56 @@ Author: Krahets (krahets@163.com)
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from include import *
from modules import *
""" 大顶堆 """
class MaxHeap:
""" 构造方法 """
""" 大顶堆 """
def __init__(self, nums: List[int]):
""" 构造方法 """
# 将列表元素原封不动添加进堆
self.max_heap = nums
# 堆化除叶结点以外的其他所有结点
for i in range(self.parent(self.size() - 1), -1, -1):
self.sift_down(i)
""" 获取左子结点索引 """
def left(self, i: int) -> int:
""" 获取左子结点索引 """
return 2 * i + 1
""" 获取右子结点索引 """
def right(self, i: int) -> int:
""" 获取右子结点索引 """
return 2 * i + 2
""" 获取父结点索引 """
def parent(self, i: int) -> int:
""" 获取父结点索引 """
return (i - 1) // 2 # 向下整除
""" 交换元素 """
def swap(self, i: int, j: int):
""" 交换元素 """
a, b = self.max_heap[i], self.max_heap[j]
self.max_heap[i], self.max_heap[j] = b, a
""" 获取堆大小 """
def size(self) -> int:
""" 获取堆大小 """
return len(self.max_heap)
""" 判断堆是否为空 """
def is_empty(self) -> bool:
""" 判断堆是否为空 """
return self.size() == 0
""" 访问堆顶元素 """
def peek(self) -> int:
""" 访问堆顶元素 """
return self.max_heap[0]
""" 元素入堆 """
def push(self, val: int):
""" 元素入堆 """
# 添加结点
self.max_heap.append(val)
# 从底至顶堆化
self.sift_up(self.size() - 1)
""" 从结点 i 开始,从底至顶堆化 """
def sift_up(self, i: int):
""" 从结点 i 开始,从底至顶堆化 """
while True:
# 获取结点 i 的父结点
p = self.parent(i)
@ -67,8 +67,8 @@ class MaxHeap:
# 循环向上堆化
i = p
""" 元素出堆 """
def poll(self) -> int:
""" 元素出堆 """
# 判空处理
assert not self.is_empty()
# 交换根结点与最右叶结点(即交换首元素与尾元素)
@ -80,8 +80,8 @@ class MaxHeap:
# 返回堆顶元素
return val
""" 从结点 i 开始,从顶至底堆化 """
def sift_down(self, i: int):
""" 从结点 i 开始,从顶至底堆化 """
while True:
# 判断结点 i, l, r 中值最大的结点,记为 ma
l, r, ma = self.left(i), self.right(i), i
@ -97,8 +97,8 @@ class MaxHeap:
# 循环向下堆化
i = ma
""" 打印堆(二叉树) """
def print(self):
""" 打印堆(二叉树) """
print_heap(self.max_heap)
@ -114,6 +114,7 @@ def test_poll(max_heap: MaxHeap):
max_heap.print()
""" Driver Code """
if __name__ == "__main__":
# 初始化大顶堆
max_heap = MaxHeap([9, 8, 6, 6, 7, 5, 2, 1, 4, 3, 6, 2])