class Solution { public: void merge(int A[], int m, int B[], int n) { int idx = m + n - 1; int im = m - 1; int in = n - 1; while (idx >= 0) { if (im == -1) { A[idx] = B[in]; --in; } else if (in == -1) { A[idx] = A[im]; --im; } else if (A[im] > B[in]) { A[idx] = A[im]; --im; } else { A[idx] = B[in]; --in; } --idx; } } };
思路:因为正序归并可能会覆盖A的数,所以反向归并。类似思路的还有手撕memcpy。