合并两个有序数组

 

 

 

//一使用一个中间数组
func merge(nums1 []int, m int, nums2 []int, n int)  {
    tmp:=make([]int,n+m)
    copy(tmp,nums1)//深拷贝
    i:=0;j:=0;k:=0
    for i<m&&j<n{
        if tmp[i]>nums2[j]{
            nums1[k]=nums2[j]
            k++;j++
        }else{
            nums1[k]=tmp[i]
            k++;i++
        }
    }
    for i<m{
        nums1[k]=tmp[i]
        k++;i++
    }
    for j<n{
        nums1[k]=nums2[j]
        k++;j++
    }
}

// 从nums1尾部往前处理,空间复杂度O(1),时间复杂度O(m+n)
func merge(nums1 []int, m int, nums2 []int, n int)  {
    i:=m-1;j:=n-1;k:=m+n-1
    for i>=0&&j>=0{
        if nums1[i]>nums2[j]{
            nums1[k]=nums1[i]
            k--;i--
        }else{
            nums1[k]=nums2[j]
            k--;j--
        }
    }
    for i>=0{
        nums1[k]=nums1[i]
        i--;k--
    }
    for j>=0{
        nums1[k]=nums2[j]
        j--;k--
    }
}

 

posted @ 2022-07-04 21:06  知道了呀~  阅读(56)  评论(0编辑  收藏  举报