04Leetcode-MergeSortedArray

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.csdn.net/linhuanmars/article/details/19712333

python版: https://blog.csdn.net/qq_28119401/article/details/52972499

猜你喜欢

转载自blog.csdn.net/qinghange/article/details/82192392
04