题目:
88.合并两个有序数组
思路:
返回nums1,两个数组是有序的。nums1的size刚好是m+n。
思路是从打到小依次把元素放入nums1相应的位置。定义三个指针。cur指向nums1的末尾,往前扫描;p_1 = m-1,表示nums1依次大的元素;p_2 = n - 1.
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.
"""
#cur = len(nums1) - 1
cur = m + n - 1
p_1 = m - 1
p_2 = n - 1
while p_1 >= 0 and p_2 >= 0:
if nums1[p_1] >= nums2[p_2]:
nums1[cur] = nums1[p_1]
p_1 -= 1
else:
nums1[cur] = nums2[p_2]
p_2 -= 1
cur -= 1
if p_1 < 0:
# p_2还有元素未合并
nums1[:p_2+1] = nums2[:p_2+1]
# return nums1