描述
给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。
说明:
初始化nums1 和 nums2 的元素数量分别为m 和 n。
你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
思路
分别从两个数组的最后一个元素开始遍历
index1 := m - 1
index2 := n - 1
比较大小 并放到 nums1 的i+j+1处
需要注意
1. 循环条件为 index1 >= 0 || index2 >= 0 因为有可能nums1 循环完 需要继续从nums2中继续拷贝元素到nums1
2. 循环内 需要判断index < 0 的情况
实现
func merge(nums1 []int, m int, nums2 []int, n int) {
index1 := m - 1
index2 := n - 1
for index1 >= 0 || index2 >= 0 {
if index1 < 0 {
nums1[index1+index2+1] = nums2[index2]
index2--
continue
}
if index2 < 0{
nums1[index1+index2+1] = nums1[index1]
index1--
continue
}
if nums2[index2] >= nums1[index1]{
nums1[index1+index2+1] = nums2[index2]
index2--
}else{
nums1[index1+index2+1] = nums1[index1]
index1--
}
}
return
}