#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
int m = nums2.size();
if (n > m){
return findMedianSortedArrays(nums2, nums1);
}
int index_1 = 0;
int index_2 = 2 * n;
int l1, r1, l2, r2;
while(index_1 <= index_2){
int c1 = (index_1 + index_2)/2;
int c2 = m + n - c1;
l1 = c1 == 0 ? INT_MIN:nums1[(c1 - 1)/2];
l2 = c2 == 0 ? INT_MIN:nums2[(c2 - 1)/2];
r1 = c1 == 2 * n ? INT_MAX:nums1[(c1)/2];
r2 = c2 == 2 * m ? INT_MAX:nums2[(c2)/2];
if (l1 > r2){
index_2 = c1 - 1;
} else if (l2 > r1){
index_1 = c1 + 1;
} else{
break;
}
}
return (max(l1, l2) + min(r1, r2)) / 2.0;
}
};
抄作业。。。二分查找还是不是很理解,这个还是要在看看。