两个排好序的数组, A有m个数, 长度够长, B有n个数, 长度为n, 将B放到A里, 不用buffer数组(临时数组), 就用A将两个合在一起, 同时排好序。 

方法: 从右边将两个数组里最大的数取出放入A的m+n-1的index处, 从右往左放, 两指针i和j, 直到i和j都等于-1. 

 

 注意:时间和空间复杂度: O(m+n) 和 O(1). 

空间复杂度即为额外用到的, 这里为0, 即O(1)。

 

class Solution {
    /**
     * @param A: sorted integer array A which has m elements, 
     *           but size of A is m+n
     * @param B: sorted integer array B which has n elements
     * @return: void
     */
    public void mergeSortedArray(int[] A, int m, int[] B, int n) {
        int i = m - 1;
        int j = n - 1;
        int k = m + n - 1;
        while (i >= 0 && j >=0) {
            
            if (A[i] <= B[j]) {
                A[k] = B[j];
                j--;
            } else {
                A[k] = A [i];
                i--;
            }
            k--;
        }
        while(i >= 0){
            A[k] = A[i];
            i--;
            k--;
        }
        while(j >= 0){
            A[k] = B[j];
            j--;
            k--;
        }
        // write your code here
    }
}