查找第k大的数
class Solution {
public:double findKthElem(int A[],int m,int B[],int n,int k){
int alow,amid,ahi,blow,bmid,bhi;
alow = 0,ahi = m-1,blow = 0,bhi = n-1;
while(alow<=ahi&&blow<=bhi){
amid = alow+(ahi-alow)/2;
bmid = blow+(bhi-blow)/2;
if(A[amid]<B[bmid]){
if(k<=amid-alow+1+bmid-blow)
bhi = bmid-1;
else{
k -= amid-alow+1; //k先减
alow = amid+1;
}
}
else{
if(k<=amid-alow+1+bmid-blow)
ahi = amid-1;
else{
k -= bmid-blow+1;
blow = bmid+1;
}
}
}
if(alow>ahi){
return B[blow+k-1];
}
if(blow>bhi)
return A[alow+k-1];
}
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 findKthElem(A,m,B,n,(m+n+1)/2);
else
return (findKthElem(A,m,B,n,(m+n)/2)+findKthElem(A,m,B,n,(m+n)/2+1))/2;
}
};