题目源自于leetcode。
题目:将有序数组B归并到有序数组A中,已知A中的剩余空间足够。
思路:1、尽量不用额外空间来进行归并。2、尽可能减少移动元素的次数,最好能一次性移到最终位置上。
方法:从尾部开始,由左向右方向归并,这样就可以原地进行。新数组的尾部游标是A、B数组元素之和,因此归并过程中新数组的尾部游标不会超过A数组的尾部游标。
代码:
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int k = m+n-1;
m--;
n--;
while(m>=0 && n>=0)
{
if(A[m] > B[n])
A[k--] = A[m--];
else
A[k--] = B[n--];
}
while(n>=0)
A[k--] = B[n--];
}
};