LeetCode 88 题

47 阅读1分钟

解题思路: 采用双指针的方式减少代码的空间复杂度,时间复杂度,这种方法的时间复杂度是O(m+n),空间复杂度是O(m+n)。

package main

import "fmt"

// 双指针法
func merge(nums1 []int, m int, nums2 []int, n int) {
    p1, p2, p := m-1, n-1, m+n-1

    for p1 >= 0 && p2 >= 0 {
       if nums1[p1] > nums2[p2] {
          nums1[p] = nums1[p1]
          p1--
       } else {
          nums1[p] = nums2[p2]
          p2--
       }
       p--
    }

    for p2 >= 0 {
       nums1[p] = nums2[p2]
       p--
       p2--
    }
}

func main() {
    nums1 := []int{1, 2, 3, 0, 0, 0}
    m := 3
    nums2 := []int{2, 5, 6}
    n := 3
    merge(nums1, m, nums2, n)
    fmt.Println(nums1) // 输出: [1 2 2 3 5 6]
}