64. 合并排序数组 II

合并两个排序的整数数组A和B变成一个新的数组。
注意事项
你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。
样例
给出A = [1, 2, 3, empty, empty], B = [4, 5]
合并之后 A 将变成 [1,2,3,4,5]

这个主要是要求原位操作,并且给的是数组形式而不是vector的。

三指针+从后向前

因为要原位操作,所以没有额外的空间,需要从后向前,两根指针分别指向两个数组的末尾,另外一根指针指向A的末尾(题目假设有这么多的空间只是没有赋值)。然后比较两个数组指向对象的大小,根据不同大小的情况决定把那个放入A的末尾,这样就能保证不会把未放入的覆盖掉,极限情况是B的所有的数都比A 的大,这样也不会覆盖掉A的最后一个数,写起来也比较简单:注意完了之后处理一下没有遍历完的那一个数组。

 void mergeSortedArray(int A[], int m, int B[], int n) {
       //三个指针
        int pos=m+n-1;
        int posA=m-1;
        int posB=n-1;
        while(posA>=0&&posB>=0)
        {
            if(A[posA]>B[posB])
            {
                A[pos]=A[posA];
                posA--;
                pos--;
            }
            else if(A[posA]=0)
        {
            A[pos]=A[posA];
            pos--;
            posA--;
        }
        while(posB>=0)
        {
            A[pos]=B[posB];
            pos--;
            posB--;
        }
        // write your code here  
    }
};

你可能感兴趣的:(64. 合并排序数组 II)