因为数组A的大小可以容纳A+B,所以直接在数组A上原地操作。从后向前,分别比较数组A和数组B的对应元素,并从后向前填入到数组A,另外再处理两个数组中的剩余元素。

class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        int k=m+n-1,i=m-1,j=n-1;
        for(;i>=0 && j>=0;){
            if(A[i]>B[j]) A[k--]=A[i--];
            else A[k--]=B[j--];
        }
        while(i>=0) A[k--]=A[i--];
        while(j>=0) A[k--]=B[j--];
    }
};