欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 --
    }
}