给一个java的解法
第二个prvaite方法就是找第k个数
package test;
public class Test {
public double findMedianSortedArrays(int a[], int b[]) {
// Start typing your Java solution below
// DO NOT write main() function
return findMedian(a,0,a.length,b,0,b.length);
}
private double findMedian(int[] a, int a0, int m, int[] b, int b0, int
n){
if((m+n)%2==0)
return (findK(a, a0,m, b, b0,n, (m+n)/2)+findK(a,a0,m,b,b0,n,(m+
n)/2+1))/2;
else return findK(a, a0, m,b, b0, n,(m+n)/2+1);
}
private double findK(int[] a, int a0, int m, int[] b, int b0, int n,
int k){
System.out.println("a0:"+a0+",m:"+m+",b0:"+b0+",n:"+n+",k:"+k);
if(m<=0) return b[b0+k-1];
if(n<=0) return a[a0+k-1];
if(k<=1) return Math.min(a[a0], b[b0]);
if(a[a0+m/2]>=b[b0+n/2]){
if(m/2+n/2>=k-1) return findK(a,a0,m/2,b,b0,n,k);
else return findK(a,a0,m,b,b0+n/2+1,n-n/2-1,k-n/2-1);
}else{
if(m/2+n/2>=k-1) return findK(a,a0,m,b,b0,n/2,k);
else return findK(a,a0+m/2+1,m-m/2-1,b,b0,n,k-m/2-1);
}
}
public static void main(String[] args) {
int[] a = {2,4};
int[] b = {3};
Test test = new Test();
System.out.println(test.findMedianSortedArrays(a, b));
}
}