Skip to content

Commit a59bc60

Browse files
committed
Add merge sorted array algorithm
1 parent c79034c commit a59bc60

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
def merge_sorted_arrays(nums1: list[int], nums2: list[int]) -> list[int]:
2+
"""
3+
Merge two sorted arrays into one sorted array.
4+
5+
Args:
6+
nums1: The first sorted array.
7+
nums2: The second sorted array.
8+
9+
Returns:
10+
A single merged and sorted array.
11+
12+
Examples:
13+
>>> merge_sorted_arrays([1, 3, 5], [2, 4, 6])
14+
[1, 2, 3, 4, 5, 6]
15+
16+
>>> merge_sorted_arrays([1, 2], [])
17+
[1, 2]
18+
19+
>>> merge_sorted_arrays([], [3, 4])
20+
[3, 4]
21+
22+
>>> merge_sorted_arrays([], [])
23+
[]
24+
25+
>>> merge_sorted_arrays([0, 0], [0, 0])
26+
[0, 0, 0, 0]
27+
28+
>>> merge_sorted_arrays([-5, -3, -1], [-2, -2])
29+
[-5, -3, -2, -2, -1]
30+
"""
31+
# If one array is empty, simply return the other.
32+
if not nums1:
33+
return nums2
34+
if not nums2:
35+
return nums1
36+
37+
# Two-pointer approach to merge both sorted arrays.
38+
i, j = 0, 0
39+
merged = []
40+
41+
while i < len(nums1) and j < len(nums2):
42+
if nums1[i] <= nums2[j]:
43+
merged.append(nums1[i])
44+
i += 1
45+
else:
46+
merged.append(nums2[j])
47+
j += 1
48+
49+
# Append remaining elements if any.
50+
merged.extend(nums1[i:])
51+
merged.extend(nums2[j:])
52+
53+
return merged
54+
55+
56+
if __name__ == "__main__":
57+
import doctest
58+
59+
doctest.testmod()

0 commit comments

Comments
 (0)