转化成通用的寻找最K小元素
public class Solution {
//还有log(min(m,n))的解法
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length, n = nums2.length;
if ((n + m) % 2 == 1)
return findKth(nums1, 0, m, nums2, 0, n, (n + m) / 2 + 1);
else
return (findKth(nums1, 0, m, nums2, 0, n, (n + m) / 2 + 1) +
findKth(nums1, 0, m, nums2, 0, n, (n + m) / 2)) / 2.0;
}
//log(m+n)
public double findKth(int[] a,int aS,int aE,int[] b,int bS,int bE,int k){
int m = aE - aS, n = bE - bS;
if(m > n) return findKth(b,bS,bE,a,aS,aE,k);
if(m==0) return b[bS+k-1];
if(k==1) return Math.min(a[aS],b[bS]);
int pa = Math.min(k/2,m),pb = k-pa;
if(a[aS+pa - 1] < b[bS+pb - 1])
return findKth(a,aS+pa,aE,b,bS,bE,k-pa);
else if(a[aS+pa-1] > b[bS+pb-1])
return findKth(a,aS,aE,b,bS+pb,bE,k-pb);
else return a[aS+pa-1];
}
}