Problem
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
The number of elements initialized in nums1 and nums2 are m and n respectively. You may assume that nums1 has a size equal to m + n such that it has enough space to hold additional elements from nums2.
Algorithm
The sub-operation in merge-sort. Use two pointers to compare the values and insert the small one then more the correspondent pointer.
Code
class Solution:
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
"""
Do not return anything, modify nums1 in-place instead.
"""
if not n:
return nums1
for i in range(m-1, -1, -1):
nums1[i + n] = nums1[i]
id_nums1 = n
id_nums2 = 0
id_nums = 0
while id_nums2 < n:
if id_nums1 < m+n and nums1[id_nums1] < nums2[id_nums2]:
nums1[id_nums] = nums1[id_nums1]
id_nums1 += 1
else:
nums1[id_nums] = nums2[id_nums2]
id_nums2 += 1
id_nums += 1