比较简单的题目,两个指针,分别遍历两个数组,然后合并起来就行了。

但是踩了python语言本身的一个坑,在这里记录下。由于python对于list可以直接insert,所以其实程序里的帮忙对A做扩容对我们是没用的,程序开头需要把扩容的给删掉。删除扩容我这边用了两种方法:

  1. A = A[:m];
while len(A) > m:
  del A[-1]

需要注意下第一种方法是不对的,第二种才是对的。 因为这个程序不允许我们返回,所以其实是直接对A内部的元素做修改,这样不返回,直接用主函数里的A处理就行了。如果我们使用第一种方法去删除A中的扩容元素,在函数里当然不会有任何问题,但是主函数里的A就不对了,因为第一种方式实际上没有真的去把元素删除掉,只是改了A的引用而已,本来A是指向整个数组的,现在A仅仅指向前m个元素了,这样我函数结束后,函数的变量被释放掉了,也就是A在函数里的引用被释放掉了,主函数里的变量A依然是指向的整个数组,这样就出问题了。第二种方式的话就没问题,因为我是把A中的元素删掉了,而不是改了A的引用本身。

其他就很容易了,见下面的代码就行了。

#
# 
# @param A int整型一维数组 
# @param B int整型一维数组 
# @return void
#
class Solution:
    def merge(self , A, m, B, n):
        # write code here
        while len(A) > m:
            del A[-1]
        i = j = 0
        while i<len(A) or j<len(B):
            if i>=len(A):
                A.insert(i , B[j])
                j+=1 ; i+=1
            elif j>=len(B):
                break
            elif A[i]<B[j]:
                i+=1
            else:
                A.insert(i , B[j])
                j+=1 ; i+=1

A = [0]
m=0
B = [1]
n=1
Solution().merge(A , m , B , n)
print(A)