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)).
参考:http://fisherlei.blogspot.com/2012/12/leetcode-median-of-two-sorted-arrays.html
class Solution { public: double findMedianSortedArrays(int A[], int m, int B[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if((m+n)%2==1) { return getKth(A,0,m,B,0,n,(m+n)/2+1); } else { double med1=getKth(A,0,m,B,0,n,(m+n)/2); double med2=getKth(A,0,m,B,0,n,(m+n)/2+1); return (med1+med2)/2; } } double getKth(int A[],int starta,int sizea, int B[], int startb,int sizeb, int k) { assert(A&&B); //here k is not index, but the k-th element if(sizea<=0) return B[startb+k-1]; if(sizeb<=0) return A[starta+k-1]; if(k<=1) return min(A[starta],B[startb]); int meda=sizea/2+1; int medb=sizeb/2+1; int med=sizea/2+sizeb/2+1; if(A[starta+meda-1]>=B[startb+medb-1]) { if(k>med) return getKth(A,starta,sizea,B,startb+medb,sizeb-medb,k-medb); else return getKth(A,starta,meda-1,B,startb,sizeb,k); } else{ if(k>med) return getKth(A,starta+meda,sizea-meda,B,startb,sizeb,k-meda); else return getKth(A,starta,sizea,B,startb,medb-1,k); } } };