题目:给定2个从小到大排序的有序数组,合并为1个从小到大的有序数组。
思路:从每个数组的最后开始比较,合并更大的元素到新数组 (因为从头开始排序,可能会存在一个数组的所有元素均大于另一个数组的最后一个元素的情况,指针不易控制)
public static int[] MergeArray(int[]A,int[]B){
//处理特殊情况
if(A==null)return B;
if(B==null)return A;
//新建数组
int[]res=new int[A.length+B.length];
int aLen=A.length-1,bLen=B.length-1,resLen=aLen+bLen+1;
//从最后一个元素开始比较合并
while (aLen>=0 && bLen>=0){
if(A[aLen]>=B[bLen]){
res[resLen--]=A[aLen--];
}else
res[resLen--]=B[bLen--];
}
//处理较长数组剩余元素
while (aLen>=0||bLen>=0){
if(aLen>=0) res[resLen--]=A[aLen--];
else res[resLen--]=B[bLen--];
}
return res;
}
自测代码:
public static void main(String[] args) {
int[]A={1,3,5,7},B={4,8,9};
int[]array=MergeArray(A,B);
System.out.println(Arrays.toString(array));
}
输出结果:
[1, 3, 4, 5, 7, 8, 9]