合并两个有序数组

88. 合并两个有序数组

合并两个有序数组

题目:点我直达

解题思路

题目比较简单,很明显是双指针,维护数组的offset来判定哪个值需要插入到新数组中

从哪里开始遍历呢?

要求保存到nums1数组中,不能从头开始遍历了(会覆盖nums1中的值),需要从尾部遍历

什么时候结束遍历呢?

当两个offset都归为0时

复杂度

只需要遍历一遍数组,最多需要跑m+n次,因此时间复杂度为 O(m+n)

空间复杂度为 O(1)

代码

func merge(nums1 []int, m int, nums2 []int, n int) {
    // 当前指针
    var (
        curr = m + n - 1
    )
    // 先让m归0
    for m > 0 {
        if n > 0 && nums1[m-1] < nums2[n-1] {
            nums1[curr] = nums2[n-1]
            n--
        } else {
            nums1[curr] = nums1[m-1]
            m--
        }
        curr--
    }
    // 再让n归0
    for n > 0 {
        nums1[curr] = nums2[n-1]
        curr--
        n--
    }
}
请用钱砸死我!!!