题目:
    88.合并两个有序数组

    思路
    image.png
    返回nums1,两个数组是有序的。nums1的size刚好是m+n。
    思路是从打到小依次把元素放入nums1相应的位置。定义三个指针。cur指向nums1的末尾,往前扫描;p_1 = m-1,表示nums1依次大的元素;p_2 = n - 1.

    1. class Solution:
    2. def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
    3. """
    4. Do not return anything, modify nums1 in-place instead.
    5. """
    6. #cur = len(nums1) - 1
    7. cur = m + n - 1
    8. p_1 = m - 1
    9. p_2 = n - 1
    10. while p_1 >= 0 and p_2 >= 0:
    11. if nums1[p_1] >= nums2[p_2]:
    12. nums1[cur] = nums1[p_1]
    13. p_1 -= 1
    14. else:
    15. nums1[cur] = nums2[p_2]
    16. p_2 -= 1
    17. cur -= 1
    18. if p_1 < 0:
    19. # p_2还有元素未合并
    20. nums1[:p_2+1] = nums2[:p_2+1]
    21. # return nums1