看代码,猜算法,复杂度是logm + logn ~
class Solution {
public:
/**
* th is 0-based
*/
int find(int *a, int n, int *b, int m, int th){
if(n == 0)
return b[th];
if(m == 0)
return a[th];
int mida = n - 1 >> 1;
int midb = m - 1 >> 1;
if(a[mida] < b[midb])
return find(b, m, a, n, th);
// a[mida] >= b[midb]
if(mida + 1 + midb + 1 <= th + 1)
return find(a, n, b + (midb + 1), m - (midb + 1), (th + 1) - (midb + 1) - 1);
else{
return find(a, mida, b, m, th);
}
}
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 & 1){
int mid = m + n >> 1;
return find(A, m, B, n, mid);
}else{
int r = m + n >> 1;
int l = r - 1;
return (find(A, m, B, n, l) + find(A, m, B, n, r)) / 2.0;
}
}
};