解析在这里:http://blog.csdn.net/mazhichao300/article/details/9714291 稍有不同,解析处是针对于求中间元素。而本题可以求第K个元素。
class Solution {
public:
int findMedian(int *a, int lena, int *b, int lenb, int median)
{
if(lena == 0) return b[median - 1];
if(lenb == 0) return a[median - 1];
int mid1 = (lena - 1) >> 1, mid2 = (lenb - 1) >> 1;
int index = mid1 + mid2 + 1;
if(a[mid1] <= b[mid2])
{
if(index >= median)
return findMedian(a, lena, b, mid2, median);
return findMedian(a + mid1 + 1, lena - mid1 - 1, b, lenb, median - mid1 - 1);
}
if(index >= median)
return findMedian(a, mid1, b, lenb, median);
return findMedian(a, lena, b + mid2 + 1, lenb - mid2 - 1, median - mid2 - 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 (double)findMedian(A, m, B, n, (m+n+1) >> 1);
}
int median1 = (m + n) >> 1;
int median2 = median1 + 1;
double ans1 = findMedian(A, m, B, n, median1);
double ans2 = findMedian(A, m, B, n, median2);
return (ans1 + ans2) / 2.0;
}
};