-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmedian.py
More file actions
37 lines (31 loc) · 856 Bytes
/
median.py
File metadata and controls
37 lines (31 loc) · 856 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
def merge(left: list, right: list) -> list:
if len(left) == 0:
return right
if len(right) == 0:
return left
result = []
size1, size2 = len(left), len(right)
i, j = 0, 0
while i < size1 and j < size2:
if left[i] <= right[j]:
result.append(left[i])
i += 1
elif left[i] > right[j]:
result.append(right[j])
j += 1
result.extend(left[i:])
result.extend(right[j:])
return result
def median(left: list, right: list) -> float:
data = merge(left, right)
size = len(data)
if size == 1:
return data[0]
if size % 2 == 1:
return data[size // 2]
l, r = (size - 1) // 2, (size + 1) // 2
return (data[l] + data[r]) / 2.0
if __name__ == "__main__":
a = [1, 2, 5]
b = [3, 4]
assert median(a, b) == 3