方法:双指针

从数组A、B的最后一个元素开始遍历,比较大小根据规则填充到A数组中。

时间复杂度:o(n)

空间复杂度:o(1)

class Solution {
  public:
    void merge(int A[], int m, int B[], int n) {
        int i = m - 1;
        int j = n - 1;
        int idx = m + n - 1;
        while (i >= 0 && j >= 0) {
            if (A[i] > B[j])
                A[idx--] = A[i--];
            else
                A[idx--] = B[j--];
        }
		// 剩余元素直接填充
        if (i >= 0) {
            while (idx >= 0)
                A[idx--] = A[i--];
        }
        if (j >= 0) {
            while (idx >= 0)
                A[idx--] = B[j--];
        }
    }
};