因为数组A的大小可以容纳A+B,所以直接在数组A上原地操作。从后向前,分别比较数组A和数组B的对应元素,并从后向前填入到数组A,另外再处理两个数组中的剩余元素。
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int k=m+n-1,i=m-1,j=n-1;
for(;i>=0 && j>=0;){
if(A[i]>B[j]) A[k--]=A[i--];
else A[k--]=B[j--];
}
while(i>=0) A[k--]=A[i--];
while(j>=0) A[k--]=B[j--];
}
};