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