lintcode 6 MergeTwoArray
描述
合并两个排序的整数数组A和B变成一个新的数组。
样例
给出 A=[1,2,3,4],B=[2,4,5,6]
,
返回 [1,2,2,3,4,4,5,6]
挑战
你能否优化你的算法,如果其中一个数组很大而另一个数组很小?
解决
public int[] mergeSortedArray(int[] A, int[] B) {
// write your code
int a = A.length;
int b = B.length;
int[] c = new int[a+b];
/**
* 如果其中一个数组很大
*/
if (A != null && B !=null) {
if (A[0]>B[B.length-1]){
System.arraycopy(B,0,c,0,B.length);
System.arraycopy(A,0,c,B.length,A.length);
}
if (A[A.length-1]<B[0]){
System.arraycopy(A,0,c,0,A.length);
System.arraycopy(B,0,c,A.length,B.length);
}
}
/**
* 正常的归并
*/
int indexa = 0;
int indexb = 0;
int i = 0;
while(indexa < a && indexb < b){
if (A[indexa]<B[indexb]){
c[i++] = A[indexa++];
continue;
}
if (A[indexa]>=B[indexb]){
c[i++] = B[indexb++];
continue;
}
}
while(indexa >= a && indexb < b){
c[i++] = B[indexb++];
}
while(indexa < a && indexb >= b){
c[i++] = A[indexa++];
}
return c;
}