时间复杂度是log(m+n);
解题思路:
先求出两数组的总长度,分奇数和偶数情况,
奇数时,将n/2不断÷2,在两个数组中不断切去较小的一些数,直到第n/2个数就是中位数;偶数时求出n/2和n/2+1的和再除2.
```cpp
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size()+nums2.size();
if(n%2==0)
{
int left = find(nums1,0,nums2,0,n/2);
int right = find(nums1,0,nums2,0,n/2+1);
return (left+right)/2.0;
}
else{
return find(nums1,0,nums2,0,n/2+1);
}
}
int find(vector<int>& nums1,int i,vector<int>& nums2,int j,int k)
{
if(nums1.size()-i>nums2.size()-j)
return find(nums2,j,nums1,i,k);
if(nums1.size()==i)
return nums2[j+k-1];
if(k==1)
return min(nums1[i],nums2[j]);
int md1 = min((int)nums1.size(),i+k/2);
int md2 = j+k/2;
if(nums1[md1-1]<nums2[md2-1])
{
return find(nums1,md1,nums2,j,k-(md1-i));
}
else{
return find(nums1,i,nums2,md2,k-(md2-j));
}
}
};