Skip to content

Commit adbe5df

Browse files
author
王洋
committed
✨ feat: 找出分区值 python3实现
1 parent 18d97e7 commit adbe5df

File tree

3 files changed

+130
-2
lines changed

3 files changed

+130
-2
lines changed

problemset/excel-sheet-column-number/index.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def titleToNumber(self, columnTitle: str) -> int:
1010
res = res + (c -_A) * math.pow(26, i)
1111
return int(res)
1212

13-
# s = Solution()
14-
# print(s.titleToNumber('A'))
13+
s = Solution()
14+
print(s.titleToNumber('A'))
1515
# print(s.titleToNumber('AB'))
1616
# print(s.titleToNumber('ZY'))
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# 从utilsPython/array.py导入quick_sort
2+
# from utilsPython.array import quick_sort
3+
from typing import List
4+
5+
def quick_sort(arr: List[int]) -> List[int]:
6+
if len(arr) <= 1:
7+
return arr
8+
pivot = arr[len(arr) // 2]
9+
left = [x for x in arr if x < pivot]
10+
middle = [x for x in arr if x == pivot]
11+
right = [x for x in arr if x > pivot]
12+
return quick_sort(left) + middle + quick_sort(right)
13+
14+
class Solution:
15+
def findValueOfPartition(self, nums: List[int]) -> int:
16+
sortedNums = quick_sort(nums)
17+
n = len(sortedNums)
18+
res = -1
19+
for i in range(0, n-1):
20+
x = sortedNums[i + 1] - sortedNums[i]
21+
if res == -1 or x < res:
22+
res = x
23+
return res
24+
25+
s = Solution()
26+
print(s.findValueOfPartition([1,3,2,4])) # 1
27+
print(s.findValueOfPartition([100,1,10])) # 9

utilsPython/array.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# array.py
2+
3+
from typing import List
4+
5+
def quick_sort(arr: List[int]) -> List[int]:
6+
if len(arr) <= 1:
7+
return arr
8+
pivot = arr[len(arr) // 2]
9+
left = [x for x in arr if x < pivot]
10+
middle = [x for x in arr if x == pivot]
11+
right = [x for x in arr if x > pivot]
12+
return quick_sort(left) + middle + quick_sort(right)
13+
14+
def merge_sort(arr: List[int]) -> List[int]:
15+
if len(arr) <= 1:
16+
return arr
17+
middle = len(arr) // 2
18+
left = merge_sort(arr[:middle])
19+
right = merge_sort(arr[middle:])
20+
return merge(left, right)
21+
22+
def merge(left: List[int], right: List[int]) -> List[int]:
23+
result = []
24+
while left and right:
25+
if left[0] < right[0]:
26+
result.append(left.pop(0))
27+
else:
28+
result.append(right.pop(0))
29+
result.extend(left if left else right)
30+
return result
31+
32+
def heap_sort(arr: List[int]) -> List[int]:
33+
def heapify(arr: List[int], n: int, i: int):
34+
largest = i
35+
left = 2 * i + 1
36+
right = 2 * i + 2
37+
38+
if left < n and arr[left] > arr[largest]:
39+
largest = left
40+
41+
if right < n and arr[right] > arr[largest]:
42+
largest = right
43+
44+
if largest != i:
45+
arr[i], arr[largest] = arr[largest], arr[i]
46+
heapify(arr, n, largest)
47+
48+
n = len(arr)
49+
for i in range(n // 2 - 1, -1, -1):
50+
heapify(arr, n, i)
51+
52+
for i in range(n - 1, 0, -1):
53+
arr[i], arr[0] = arr[0], arr[i]
54+
heapify(arr, i, 0)
55+
56+
return arr
57+
58+
def shell_sort(arr: List[int]) -> List[int]:
59+
n = len(arr)
60+
gap = n // 2
61+
while gap > 0:
62+
for i in range(gap, n):
63+
temp = arr[i]
64+
j = i
65+
while j >= gap and arr[j - gap] > temp:
66+
arr[j] = arr[j - gap]
67+
j -= gap
68+
arr[j] = temp
69+
gap //= 2
70+
return arr
71+
72+
def insertion_sort(arr: List[int]) -> List[int]:
73+
for i in range(1, len(arr)):
74+
key = arr[i]
75+
j = i - 1
76+
while j >= 0 and key < arr[j]:
77+
arr[j + 1] = arr[j]
78+
j -= 1
79+
arr[j + 1] = key
80+
return arr
81+
82+
def selection_sort(arr: List[int]) -> List[int]:
83+
for i in range(len(arr)):
84+
min_idx = i
85+
for j in range(i + 1, len(arr)):
86+
if arr[j] < arr[min_idx]:
87+
min_idx = j
88+
arr[i], arr[min_idx] = arr[min_idx], arr[i]
89+
return arr
90+
91+
def bubble_sort(arr: List[int]) -> List[int]:
92+
n = len(arr)
93+
for i in range(n):
94+
swapped = False
95+
for j in range(0, n - i - 1):
96+
if arr[j] > arr[j + 1]:
97+
arr[j], arr[j + 1] = arr[j + 1], arr[j]
98+
swapped = True
99+
if not swapped:
100+
break
101+
return arr

0 commit comments

Comments
 (0)