88. 合并两个有序数组

https://leetcode-cn.com/problems/merge-sorted-array/

解法一:

正向。两个指针分别指向两个数组,从头开始比较合并,取较小的插入nums1缺点在于若发生插入,需要挪动

解法二:

反向。依然用两个指针,再加一个指针指向合并区末尾。从尾开始比较,取较大的插入nums1末尾,不会发生插入挪动。

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.
        """
        i, j, k = m-1, n-1, m+n-1   #i,j分别指向nums1,nums2有效区末尾;k指向nums1末尾
        while i >= 0 and j >= 0:
            if nums1[i] > nums2[j]:     #较大的插入nums1末尾
                nums1[k] = nums1[i]
                k -= 1
                i -= 1
            else:                   #较小的插入nums2末尾
                nums1[k] = nums2[j]
                k -= 1
                j -= 1
        #若i先走完,则继续处理j
        #不用考虑j先走完,因为j走完说明nums2最小的都已经放入nums1,合并完成
        while j >= 0:
            nums1[k] = nums2[j]
            k -= 1
            j -= 1

最后更新于