双指针
从后向前进行对比,将对比结果放在数组A最后
class Solution {
public void merge(int[] A, int m, int[] B, int n) {
int pA_end = m - 1;
int pB_end = n - 1;
int p = m + n -1;
while(pB_end >= 0 && pA_end >= 0){
if(A[pA_end] <= B[pB_end]){
A[p] = B[pB_end];
--pB_end;
--p;
}else{
A[p] = A[pA_end];
--pA_end;
--p;
}
}
System.arraycopy(B, 0, A, 0, pB_end+1);
}
}
System.arraycopy函数参数解释:
System.arraycopy(源数组, 源数组起始位置, 目标数组, 目标数组起始位置, 从源数组复制的长度)
;
下面是简化写法
class Solution {
public void merge(int[] A, int m, int[] B, int n) {
int pA_end = m - 1;
int pB_end = n - 1;
int p = m + n -1;
while(pB_end >= 0 && pA_end >= 0){
A[p--] = (A[pA_end] <= B[pB_end])?B[pB_end--]:A[pA_end--];
}
System.arraycopy(B, 0, A, 0, pB_end+1);
}
}
这题和leetCode第88题一样:合并两个有序数组