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 andn respectively.
这题目很坑,如果A是[]的话,实际上是[0]但是m=0
class Solution:
# @param A a list of integers
# @param m an integer, length of A
# @param B a list of integers
# @param n an integer, length of B
# @return nothing
def merge(self, A, m, B, n):
if m==0:
for i in range(n):#如果m=0的话,说明A是空,所以把B的值一个一个赋给A,不能A=B不然输出不正确。。。
A[i]=B[i]
return
elif n!=0:#如果B非空,B是空的话,就不用计算了
curA=m-1
curB=n-1
cur=m+n-1
while (cur>=0):#指向混合后数组最后一个,向前一个一个赋值
if curA>=0:#如果curA变负数了,说明A的已经全部结束,这时要把B剩下的值放到最前面去
if B[curB]>=A[curA]:
A[cur]=B[curB]
curB-=1
if curB<0:如果curB变负数了,说明B的值全放到A里面去了,则自然结束
return
cur-=1
else:
A[cur]=A[curA]
curA-=1
cur-=1
else:
A[cur]=B[curB]#如果curA变负数了,说明A的以及全部结束,这时要把B剩下的值放到最前面去
curB-=1
cur-=1
return