Skip to content

Commit 77ae4ad

Browse files
author
bjweimengshu
committed
优化代码
1 parent 8907cf1 commit 77ae4ad

File tree

10 files changed

+89
-35
lines changed

10 files changed

+89
-35
lines changed

src/chapter3/part2/BinaryTreeTraversal.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ def __init__(self, data):
88

99

1010
def create_binary_tree(input_list=[]):
11+
"""
12+
构建二叉树
13+
:param input_list: 输入数列
14+
"""
1115
if input_list is None or len(input_list) == 0:
1216
return None
1317
data = input_list.pop(0)
@@ -20,6 +24,10 @@ def create_binary_tree(input_list=[]):
2024

2125

2226
def pre_order_traversal(node):
27+
"""
28+
前序遍历
29+
:param node: 二叉树节点
30+
"""
2331
if node is None:
2432
return
2533
print(node.data)
@@ -29,6 +37,10 @@ def pre_order_traversal(node):
2937

3038

3139
def in_order_traversal(node):
40+
"""
41+
中序遍历
42+
:param node: 二叉树节点
43+
"""
3244
if node is None:
3345
return
3446
in_order_traversal(node.left)
@@ -38,6 +50,10 @@ def in_order_traversal(node):
3850

3951

4052
def post_order_traversal(node):
53+
"""
54+
后序遍历
55+
:param node: 二叉树节点
56+
"""
4157
if node is None:
4258
return
4359
post_order_traversal(node.left)

src/chapter3/part3/HeapOperator.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11

22
def up_adjust(array=[]):
3+
"""
4+
二叉堆的尾节点上浮操作
5+
:param array: 原数组
6+
"""
37
child_index = len(array) - 1
48
parent_index = (child_index - 1) // 2
59
# temp保存插入的叶子节点值,用于最后的赋值
@@ -13,6 +17,12 @@ def up_adjust(array=[]):
1317

1418

1519
def down_adjust(parent_index, length, array=[]):
20+
"""
21+
二叉堆的节点下沉操作
22+
:param parent_index: 待下沉的节点下标
23+
:param length: 堆的长度范围
24+
:param array: 原数组
25+
"""
1626
# temp保存父节点值,用于最后的赋值
1727
temp = array[parent_index]
1828
child_index = 2 * parent_index + 1
@@ -31,6 +41,10 @@ def down_adjust(parent_index, length, array=[]):
3141

3242

3343
def build_heap(array=[]):
44+
"""
45+
二叉堆的构建操作
46+
:param array: 原数组
47+
"""
3448
# 从最后一个非叶子节点开始,依次下沉调整
3549
for i in range((len(array)-2) // 2, -1, -1):
3650
down_adjust(i, len(array), array)

src/chapter4/part5/BucketSort.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def bucket_sort(array=[]):
2121
bucket.append(array[i])
2222
# 4.对每个桶内部进行排序
2323
for i in range(0, len(bucket_list)):
24-
# list采用了归并排序或归并的优化版本
24+
# sort方法采用了时间复杂度O(nlogn)的排序算法
2525
bucket_list[i].sort()
2626
# 5.输出全部元素
2727
sorted_array = []

src/chapter5/part11/GoldMining.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
def get_best_gold_mining(w, n, p=[], g=[]):
2+
"""
3+
:param w: 工人数量
4+
:param n: 可选金矿数量
5+
:param p: 金矿开采所需工人数量
6+
:param g: 金矿储量
7+
:return: 最优收益
8+
"""
29
if w == 0 or n == 0:
310
return 0
411
if w < p[n-1]:
@@ -7,6 +14,12 @@ def get_best_gold_mining(w, n, p=[], g=[]):
714

815

916
def get_best_gold_mining_v2(w, p=[], g=[]):
17+
"""
18+
:param w: 工人数量
19+
:param p: 金矿开采所需工人数量
20+
:param g: 金矿储量
21+
:return: 最优收益
22+
"""
1023
result_table = [[0 for i in range(w+1)] for i in range(len(g)+1)]
1124
# 填充表格
1225
for i in range(1, len(g)+1):
@@ -20,6 +33,12 @@ def get_best_gold_mining_v2(w, p=[], g=[]):
2033

2134

2235
def get_best_gold_mining_v3(w, p=[], g=[]):
36+
"""
37+
:param w: 工人数量
38+
:param p: 金矿开采所需工人数量
39+
:param g: 金矿储量
40+
:return: 最优收益
41+
"""
2342
# 创建当前结果
2443
results = [0]*(w+1)
2544
# 填充一维数组

src/chapter5/part3/MinStack.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,35 @@
11
class MinStack:
22
def __init__(self):
3-
self.mainStack = []
4-
self.minStack = []
3+
self.main_stack = []
4+
self.min_stack = []
55

66
def push(self, element):
7-
self.mainStack.append(element)
7+
self.main_stack.append(element)
88
# 如果辅助栈为空,或新元素小于等于辅助栈栈顶,则新元素压入辅助栈
9-
if len(self.minStack) == 0 or element <= self.minStack[len(self.minStack)-1]:
10-
self.minStack.append(element)
9+
if len(self.min_stack) == 0 or element <= self.min_stack[len(self.min_stack) - 1]:
10+
self.min_stack.append(element)
1111

1212
def pop(self):
13-
# 如果出栈元素和辅助栈栈顶元素值相等,辅助栈出栈
14-
if self.mainStack[len(self.mainStack)-1] == self.minStack[len(self.minStack)-1]:
15-
self.minStack.pop()
16-
return self.mainStack.pop()
13+
# 如果出栈元素和辅助栈栈顶元素值相等,辅助栈的栈顶元素出栈
14+
if self.main_stack[len(self.main_stack) - 1] == self.min_stack[len(self.min_stack) - 1]:
15+
self.min_stack.pop()
16+
return self.main_stack.pop()
1717

1818
def get_min(self):
19-
if len(self.mainStack) == 0:
19+
if len(self.main_stack) == 0:
2020
return None
21-
return self.minStack[len(self.minStack)-1]
21+
return self.min_stack[len(self.min_stack) - 1]
2222

2323

24-
myStack = MinStack()
25-
myStack.push(4)
26-
myStack.push(9)
27-
myStack.push(7)
28-
myStack.push(3)
29-
myStack.push(8)
30-
myStack.push(5)
31-
print(myStack.get_min())
32-
myStack.pop()
33-
myStack.pop()
34-
myStack.pop()
35-
print(myStack.get_min())
24+
my_stack = MinStack()
25+
my_stack.push(4)
26+
my_stack.push(9)
27+
my_stack.push(7)
28+
my_stack.push(3)
29+
my_stack.push(8)
30+
my_stack.push(5)
31+
print(my_stack.get_min())
32+
my_stack.pop()
33+
my_stack.pop()
34+
my_stack.pop()
35+
print(my_stack.get_min())

src/chapter5/part9/RemoveKDigits.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ def remove_k_digits(num, k):
1111
if not has_cut:
1212
num = num[0:len(num)-1]
1313
# 清除整数左侧的数字0
14+
start = 0
1415
for j in range(0, len(num)-1):
15-
if num[0] != '0':
16+
if num[j] != '0':
1617
break
17-
num = num[1:len(num)]
18+
start += 1
19+
num = num[start:len(num)]
1820
# 如果整数的所有数字都被删除了,直接返回0
1921
if len(num) == 0:
2022
return "0"
@@ -41,7 +43,7 @@ def remove_k_digits_v2(num, k):
4143
continue
4244
# 遍历到的当前数字入栈
4345
stack.append(c)
44-
# 找到栈中第一个非零数字的位置,以此构建新的整数字符串
46+
# 用栈构建新的整数字符串
4547
if new_length <= 0:
4648
return "0"
4749
return "".join(stack)
@@ -52,3 +54,4 @@ def remove_k_digits_v2(num, k):
5254
print(remove_k_digits("10", 2))
5355
print(remove_k_digits("541270936", 3))
5456
print(remove_k_digits("1593212", 4))
57+
print(remove_k_digits("10000100002", 2))

src/chapter6/__init__.py

Whitespace-only changes.

src/chapter6/part2/MyBitmap.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ def get_word_index(self, bit_index):
2020
return bit_index >> 6
2121

2222

23-
bitMap = MyBitmap(128)
24-
bitMap.set_bit(126)
25-
bitMap.set_bit(75)
23+
bitMap = MyBitmap(21474836470)
24+
bitMap.set_bit(78)
25+
bitMap.set_bit(50)
2626
print(bitMap.get_bit(126))
2727
print(bitMap.get_bit(78))
2828

src/chapter6/part3/LRUCache.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ def put(self, key, value):
2828
self.refresh_node(node)
2929

3030
def remove(self, key):
31-
node = self.hash.get(key);
32-
self.remove_node(node);
33-
self.hash.remove(key);
31+
node = self.hash.get(key)
32+
self.remove_node(node)
33+
self.hash.remove(key)
3434

3535
def refresh_node(self, node):
3636
# 如果访问的是尾节点,无需移动节点
3737
if node == self.end:
3838
return
3939
# 移除节点
40-
self.remove_node(node);
40+
self.remove_node(node)
4141
# 重新插入节点
42-
self.add_node(node);
42+
self.add_node(node)
4343

4444
def remove_node(self, node):
4545
if node == self.head and node == self.end:

src/chapter6/part4/AStar.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
def a_star_search(start, end):
2+
# 待访问的格子
23
open_list = []
4+
# 已访问的格子
35
close_list = []
46
# 把起点加入open_list
57
open_list.append(start)

0 commit comments

Comments
 (0)