Skip to content

Commit 8907cf1

Browse files
author
bjweimengshu
committed
可爱的小灰
1 parent 9cb435f commit 8907cf1

File tree

14 files changed

+210
-30
lines changed

14 files changed

+210
-30
lines changed

src/chapter2/part1/MyArray.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def __init__(self, capacity):
77
def insert(self, index, element):
88
# 判断访问下标是否超出范围
99
if index < 0 or index > self.size:
10-
print("超出列表实际元素范围!")
10+
raise Exception("超出数组实际元素范围!")
1111
# 从右向左循环,逐个元素向右挪一位。
1212
for i in range(self.size-1, -1, -1):
1313
self.array[i+1] = self.array[i]
@@ -18,7 +18,7 @@ def insert(self, index, element):
1818
def insert_v2(self, index, element):
1919
# 判断访问下标是否超出范围
2020
if index < 0 or index > self.size:
21-
print("超出列表实际元素范围!")
21+
raise Exception("超出数组实际元素范围!")
2222
# 如果实际元素达到数组容量上线,数组扩容
2323
if self.size >= len(self.array):
2424
self.resize()
@@ -39,7 +39,7 @@ def resize(self):
3939
def remove(self, index):
4040
# 判断访问下标是否超出范围
4141
if index < 0 or index >= self.size:
42-
print("超出列表实际元素范围!")
42+
raise Exception("超出数组实际元素范围!")
4343
# 从左到右,逐个元素向左挪动一位
4444
for i in range(index, self.size):
4545
self.array[i] = self.array[i+1]

src/chapter2/part2/MyLinkedList.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,15 @@ def __init__(self):
1212

1313
def get(self, index):
1414
if index < 0 or index >= self.size:
15-
print('超出链表节点范围!')
16-
return
15+
raise Exception("超出链表节点范围!")
1716
p = self.head
1817
for i in range(index):
1918
p = p.next
2019
return p
2120

2221
def insert(self, data, index):
2322
if index < 0 or index > self.size:
24-
print('超出链表节点范围!')
25-
return
23+
raise Exception("超出链表节点范围!")
2624
node = Node(data)
2725
if self.size == 0:
2826
# 空链表
@@ -35,7 +33,7 @@ def insert(self, data, index):
3533
elif self.size == index:
3634
# 插入尾部
3735
self.last.next = node
38-
self.last = node;
36+
self.last = node
3937
else:
4038
# 插入中间
4139
prev_node = self.get(index-1)
@@ -45,8 +43,7 @@ def insert(self, data, index):
4543

4644
def remove(self, index):
4745
if index < 0 or index >= self.size:
48-
print('超出链表节点范围!')
49-
return
46+
raise Exception("超出链表节点范围!")
5047
# 暂存被删除的节点,用于返回
5148
if index == 0:
5249
# 删除头节点

src/chapter2/part3/MyQueue.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@ def __init__(self, capacity):
77

88
def enqueue(self, element):
99
if (self.rear+1) % len(self.list) == self.front:
10-
print('队列已满!')
11-
return
10+
raise Exception("队列已满 !")
1211
self.list[self.rear] = element
1312
self.rear = (self.rear+1) % len(self.list)
1413

1514
def dequeue(self):
1615
if self.rear == self.front:
17-
print('队列为空!')
18-
return
16+
raise Exception("队列为空 !")
1917
dequeue_element = self.list[self.front]
2018
self.front = (self.front+1) % len(self.list)
2119
return dequeue_element

src/chapter3/part4/PriorityQueue.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ def enqueue(self, element):
1111

1212
def dequeue(self):
1313
if self.size < 0:
14-
print("队列为空!")
15-
return None
14+
raise Exception("队列为空 !")
1615
head = self.array[0]
1716
self.array[0] = self.array[self.size-1]
1817
self.size -= 1
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
def find_median_sorted_arrays(array_A, array_B):
2+
m, n = len(array_A), len(array_B)
3+
# 如果数组A的长度大于等于数组B,则交换数组
4+
if m > n:
5+
array_A, array_B, m, n = array_B, array_A, n, m
6+
if n == 0:
7+
raise ValueError
8+
start, end, half_len = 0, m, (m + n + 1) // 2
9+
while start <= end:
10+
i = (start + end) // 2
11+
j = half_len - i
12+
if i < m and array_B[j-1] > array_A[i]:
13+
# i偏小了,需要右移
14+
start = i + 1
15+
elif i > 0 and array_A[i - 1] > array_B[j]:
16+
# i偏大了,需要左移
17+
end = i - 1
18+
else:
19+
# i刚好合适,或i已达到数组边界
20+
if i == 0:
21+
max_of_left = array_B[j-1]
22+
elif j == 0:
23+
max_of_left = array_A[i-1]
24+
else:
25+
max_of_left = max(array_A[i-1], array_B[j-1])
26+
if (m + n) % 2 == 1:
27+
# 如果大数组的长度是奇数,中位数就是左半部分的最大值
28+
return max_of_left
29+
if i == m:
30+
min_of_right = array_B[j]
31+
elif j == n:
32+
min_of_right = array_A[i]
33+
else:
34+
min_of_right = min(array_A[i], array_B[j])
35+
# 如果大数组的长度是偶数,取左侧最大值和右侧最小值的平均
36+
return (max_of_left + min_of_right) / 2.0
37+
38+
39+
my_array_A = list([3, 5, 6, 7, 8, 12, 20])
40+
my_array_B = list([1, 10, 17, 18])
41+
print(find_median_sorted_arrays(my_array_A, my_array_B))
42+

src/chapter5/part12/FindLostNum.py renamed to src/chapter5/part13/FindLostNum.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ def find_lost_num(array=[]):
77
xor_result ^= array[i]
88
# 如果异或结果为0,说明输入数组不符合题目
99
if xor_result == 0:
10-
return None
10+
raise ValueError
1111
# 确定两个整数的不同位,以此来做分组
1212
separator = 1
1313
while 0 == (xor_result & separator):

src/chapter5/part3/MinStack.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ def push(self, element):
1111

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

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

2323

2424
myStack = MinStack()

src/chapter5/part4/GreatestCommonDivisor.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,22 @@ def get_greatest_common_divisor_v3(a, b):
2525
return get_greatest_common_divisor_v2(big-small, small)
2626

2727

28-
def gcb(a, b):
28+
def get_greatest_common_divisor_v4(a, b):
2929
if a == b:
3030
return a
3131
if (a & 1) == 0 and (b & 1) == 0:
32-
return gcb(a >> 1, b >> 1) << 1
32+
return get_greatest_common_divisor_v4(a >> 1, b >> 1) << 1
3333
elif (a & 1) == 0 and (b & 1) != 0:
34-
return gcb(a >> 1, b)
34+
return get_greatest_common_divisor_v4(a >> 1, b)
3535
elif (a & 1) != 0 and (b & 1) == 0:
36-
return gcb(a, b >> 1)
36+
return get_greatest_common_divisor_v4(a, b >> 1)
3737
else:
3838
big = max(a, b)
3939
small = min(a, b)
40-
return gcb(big-small, small)
40+
return get_greatest_common_divisor_v4(big - small, small)
4141

4242

4343
print(get_greatest_common_divisor(25, 5))
4444
print(get_greatest_common_divisor_v2(100, 75))
4545
print(get_greatest_common_divisor_v3(99, 55))
46-
print(gcb(100, 80))
46+
print(get_greatest_common_divisor_v4(100, 80))

src/chapter5/part7/StackQueue.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def en_queue(self, element):
99
def de_queue(self):
1010
if len(self.stackB) == 0:
1111
if len(self.stackA) == 0:
12-
return None
12+
raise Exception("栈已经空了 !")
1313
self.transfer()
1414
return self.stackB.pop()
1515

src/chapter5/part8/FindNearestNumber.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ def find_nearest_number(numbers=[]):
44
# 如果数字置换边界是0,说明整个数组已经逆序,无法得到更大的相同数字组成的整数,返回null
55
if index == 0:
66
return None
7-
87
# 2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置
98
# 拷贝入参,避免直接修改入参
109
numbers_copy = numbers.copy()

0 commit comments

Comments
 (0)