这个题要求在数组nums1上直接排序,强行限制空间复杂度,但是如果你另外再开好一个数组,排好序之后,再拷贝到nums1也不是不行,但是应该不是出题者的初衷吧。
考虑到头插法还需要移动nums1中后面的元素,用两个指针实现尾插法排序,具体代码如下:
func merge(nums1 []int, m int, nums2 []int, n int) {
length := m+n
// 对应各自下标
m--
n--
length--
for m>=0 || n>=0 {
if m == -1 {
nums1[length] = nums2[n]
n--
}else if n == -1 {
nums1[length] = nums1[m]
m--
}else if nums1[m] > nums2[n] {
nums1[length] = nums1[m]
m--
}else {
nums1[length] = nums2[n]
n--
}
length--
}
}
另外记录一个首个双白哈哈哈哈!