合并两个有序数组
题目:点我直达
解题思路
题目比较简单,很明显是双指针,维护数组的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--
}
}