两个索引位置分别从两个数组最右边开始,选择一个较大的数插入到A的最右边,插入后改变索引位置。到最后如果B中的数没有完全插入到B中,则将剩余的数插入到A中。
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)
{
//选择较大的数插入到A中同时索引位置改变;
if(A[i] > B[j])
{
A[idx] = A[i];
i--;
}else {
A[idx] = B[j];
j--;
}
idx--;
}
//如果B中有剩余数没有插入到数组中,则将余下的数插入到剩下的位置;
//否则B中的数都插入到了A中则不作处理。因为A已经有序;
while(j>=0)
{
A[idx--] = B[j--];
}
}
};
京公网安备 11010502036488号