时间复杂度O(m+n)
空间复杂度O(1)
class Solution {public:void merge(int A[], int m, int B[], int n) {// 从后往前开始合并,不需要开辟额外的空间和大量的移位操作int idx = m+n-1;// 两个数组合并完的长度是m+n,所以从数组A的m+n-1处开始往前存放元素int i = m-1, j = n-1;while (i >= 0 && j >= 0) {// 依次比较两个数组末尾的元素,较大的值放进A的后面if (A[i] >= B[j]) {A[idx--] = A[i--];} else {A[idx--] = B[j--];}}// while (i >= 0) A[idx--] = A[i--];while (j >= 0) A[idx--] = B[j--]; // 最后只需要考虑B为空的情况}};
