解题思路: 采用双指针的方式减少代码的空间复杂度,时间复杂度,这种方法的时间复杂度是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]
}