04Leetcode-MergeSortedArray

博客介绍了将两个已排好序的整数数组A和B合并为一个有序数组的问题。在不额外增加空间的情况下,利用A可容纳A + B的特性,从后往前遍历A和B,将较大值放入A的合适位置。还给出了C++和Python版的参考代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two sorted integer arrays A and B, merge B into A as one sorted array.

Note: You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.

题意:A和B都是已排好序的数组,在不额外增加空间的情况下,融合A和B, 且A可以容纳A+B

分析:由于A可容纳A + B,所有用下标i指向m + n - 1(最大数值存放的地方),从后往前遍历A,B,谁大就放到i这里,同时i--

C++版:

void merge(int A[], int len1, int B[], int len2)
{
    int i = len1 - 1 ;
    int j = len2 - 1 ;
    int k = len1 + len2 -1 ;
    while(k>=0){
        if(i>=0 && j>=0){
            if(A[i]<B[j])
                 A[k--] = A[i--];
            else
                 A[k--] = B[j--];         
         }
         else if(i>=0)
                A[k--] = A[i--];
         else if(j>=0)
                A[K--] = B[j--];
    }
}

python版:

# 思路:需要一个临时数组,把依次比较的数加入临时数组 注意:m,n是第一数组和第二组数中有效需要排序的数,但len(nums1)不一定等于m 由于结果要保存在第一个数组里,所以还要保证数组一要有m+n个空间。 
 def merge(self, nums1,m, nums2, n):
    tmp = []
    i = j = 0
    while i!=m and j!=n:
        if nums1[i]<nums2[j]:
            tmp.append(nums1[i])
            i=i+1
        else:
            tmp.append(nums2[j])
            j=j+1
     while i!=m:
        tmp.append(nums1[i])
        i=i+1
     while j!=n:
        tmp.append(nums2[j])
        j=j+1
      for i in range(m+n):
            nums1[i] = tmp[i]

 

 

 

 

 

 

reference:

C++版: https://blog.youkuaiyun.com/linhuanmars/article/details/19712333

python版: https://blog.youkuaiyun.com/qq_28119401/article/details/52972499

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值