照例记录下思路。
依然双指针,要求归并至 A 数组,考虑逆向归并,比较 A、B 尾部元素,大的从 A 数组索引 (A.length + B.length - 1) 开始逆向放置。最后刚好排满。
public void merge(int A[], int m, int B[], int n) {
int aPtr = m - 1, bPtr = n - 1;
// 两数组元素从右至左比较,大的去 A 尾部,直至有一方指针到头为止
for (int ptr = m + n - 1; aPtr >= 0 && bPtr >= 0; ptr--){
A[ptr] = A[aPtr] > B[bPtr] ? A[aPtr--] : B[bPtr--];
}
// A 指针先走完的情况,B 中剩余元素直接copy至 A 对应位置即可;
while (bPtr >= 0){
A[bPtr] = B[bPtr--];
}
}


京公网安备 11010502036488号