There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
//下面这个算法只做到了O(m+n),虽然还是被oj接受了,但还是要继续改进
int[] merge(int[] arrToBeMergedA, int[] arrToBeMergedB){
if(arrToBeMergedA == null || arrToBeMergedB == null){
return null;
}else if(arrToBeMergedA == null){
return arrToBeMergedB;
}else if(arrToBeMergedB == null){
return arrToBeMergedA;
}else {
int[] mergedArr = new int[arrToBeMergedA.length + arrToBeMergedB.length];
int pointA = 0;
int pointB = 0;
for(int i = 0; i < mergedArr.length; ){
if(pointA < arrToBeMergedA.length && pointB < arrToBeMergedB.length){
mergedArr[i++] = arrToBeMergedA[pointA]<=arrToBeMergedB[pointB]?arrToBeMergedA[pointA++]:arrToBeMergedB[pointB++];
}else if(pointA >= arrToBeMergedA.length){
mergedArr[i++] = arrToBeMergedB[pointB++];
}else{
mergedArr[i++] = arrToBeMergedA[pointA++];
}
}
return mergedArr;
}
}
public double findMedianSortedArrays(int A[], int B[]) {
int[] myArr = merge(A,B);
int middle = myArr.length / 2;
double median = 0;
if(myArr.length % 2 == 0){
median = (myArr[middle] + myArr[middle-1]) / 2.0;
}else{
median = myArr[middle];
}
return median;
}