数组A的空间足以放置A和B中所有的元素,所以当前A中元素之后还有空间,用于放置B中元素,故而考虑从后往前进行放置。首先A中最大和B中最大进行比较,较大的放置在数组末尾,较小的依旧进行比较。以此类推,若A中元素首先被放置完毕,则将B中剩余元素直接复制进入A中即可,反之亦然,直到所有元素都放置完毕。
class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        if (m == 0) {
            for (int i = 0; i < n; i++)
                A[i] = B[i];
            return ;
        }
        else {
            int i = m - 1, j = n - 1; 
            while(i >= 0 && j >= 0) {
                if (A[i] > B[j]) {
                    A[i + j + 1] = A[i];
                    i--;
                }
                else {
                    A[i + j + 1] = B[j];
                    j--;
                }
            }
            if (i >= 0) {//A中元素未放置完
        for (int t = i; t >= 0;) {
            A[t--] = A[i--];
        }
    }
    else if (j >= 0) {//B中元素未放置完
        for (int t = j; t >= 0;) {
            A[t--] = B[j--];
        }
    }
        }
    }
};