go语言刷题:88.合并两个有序数组
程序员文章站
2024-03-23 10:48:10
...
申明:本文只用做自己学习记录
题目
两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
示例 1:
输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:
输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
代码
func merge(nums1 []int, m int, nums2 []int, n int) {
//定义三个数组的最大的元素个数
//left为nums1元素的最大序号,right为nums2元素的最大序号,p为总元素的最大序号
left, right, p := m - 1, n - 1, m + n - 1
//nums1、nums2没有遍历完时
for left >= 0 && right >= 0{
//把num1与num2中比较大的数取出
//在原来num1的切片上开辟空间在其末位存入最大数
//更新计数序号
if nums1[left] > nums2[right] {
nums1[p] = nums1[left]
left --
}else {
nums1[p] = nums2[right]
right --
}
//更新总元素计数序号
p --
}
//当num2(right)先计数完成时,num1还有剩余元素,由于本来就是在num1的基础上开辟的内存空间,所以剩下的元素不需要改动,直接就在num1内
//当num1(left)先计数完成时,num2还有剩余元素,则继续排序
//由于num2本身就是从小到大排序,故只需按顺序填充即可
for right >= 0 {
nums1[p] = nums2[right]
p --
right --
}
}