Description: Merge nums1 and nums2 into a single array sorted in non-decreasing order.
Code:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
# initialize the three pointers (note arrays are already sorted)
i = m - 1 #arr1
j = n - 1 #arr2
k = m + n - 1 #arr1 + arr2
while i >= 0 and j >= 0:
if nums1[i] >= nums2[j]:
nums1[k] = nums1[i]
i -= 1
else:
nums1[k] = nums2[j]
j -= 1
k -=1
while j>= 0:
nums1[k] = nums2[j]
j -=1
k -=1
Efficiency:
Time Complexity: O(n+m)
Space Complexity: O(1)
Test:
nums1 = [1,2,3,0,0,0]
m = 3
nums2 = [2,5,6]
n = 3
merge(nums1, m, nums2, n)
print(nums1) #Output: [1,2,2,3,5,6]
nums1, m, nums2, n = [1], 1, [], 0
merge(nums1, m, nums2, n)
print(nums1) #Output: [1]
nums1 = [0]
m = 0
nums2 = [1]
n = 1
merge(nums1, m, nums2, n)
print(nums1) #Output: [1]