两个索引位置分别从两个数组最右边开始,选择一个较大的数插入到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--]; } } };