There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. e overall run time complexity should be O(log(m + n)).
事实上,本题可以演变为在log(m+n)的时间内找出两个排序数组合并后第K个元素的问题,下面给出一个参考文章
http://blog.csdn.net/sunjilong/article/details/17731681
代码如下
public static double solution2_1_5(int numA[],int numB[]){
int total=numA.length+numB.length;
if(total%2==0)
return (pre_solution2_1_5(numA,numB,numA.length,numB.length,0,0,total/2)+pre_solution2_1_5(numA,numB,numA.length,numB.length,0,0,total/2+1))/2;
else{
return pre_solution2_1_5(numA,numB,numA.length,numB.length,0,0,total/2+1);
}
}
public static int pre_solution2_1_5(int numA[],int numB[],int lenA,int lenB,int startA,int startB,int k){
if(lenA>lenB)
return pre_solution2_1_5(numB,numA,lenB,lenA,startB,startA,k);
if(lenA==0)
return numB[startB+k-1];
if(k==1)
return numA[startA]<numB[startB]?numA[startA]:numB[startB];
else{
int pa=k/2<lenA?k/2:lenA;
int pb=k-pa;
if(numA[startA+pa-1]==numB[startB+pb-1])
return numA[startA+pa-1];
if(numA[startA+pa-1]<numB[startB+pb-1]){
return pre_solution2_1_5(numA,numB,lenA-pa,lenB,startA+pa,startB,k-pa);
}
else{
return pre_solution2_1_5(numA,numB,lenA,lenB-pb,startA,startB+pb,k-pb);
}
}
}