使用原数组空间,防止影响前面未合并元素,从后面开始遍历。双指针分别指向两个数组最后元素,比较合并,合并的指针前移,直到其中一个数组合并完成,再直接合并另一个数组。

class Solution {
public:

    void merge(int A[], int m, int B[], int n) {
        int a = m;
        int b = n;
        int c = m + n - 1;

        while(a && b){
            if(A[a-1] > B[b-1]){
                A[c] = A[a-1];
                c--;
                a--;
            }else{
                A[c] = B[b-1];
                c--;
                b--;
            }
        }

        while(a){
            A[c] = A[a-1];
            c--;
            a--;
        }

        while(b){
            A[c] = B[b-1];
            c--;
            b--;
        }
    }
};