代码:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n = nums1.size(); int m = nums2.size(); if(n > m) //保证数组1一定最短 return findMedianSortedArrays(nums2,nums1); int L1,L2,R1,R2,c1,c2,lo = 0, hi = 2*n; //我们目前是虚拟加了'#'所以数组1是2*n长度 while(lo <= hi) //二分 { c1 = (lo+hi)/2; //c1是二分的结果 c2 = m+n- c1; cout<<c1<<" "<<c2<<endl; L1 = (c1 == 0)?INT_MIN:nums1[(c1-1)/2]; //map to original element R1 = (c1 == 2*n)?INT_MAX:nums1[c1/2]; L2 = (c2 == 0)?INT_MIN:nums2[(c2-1)/2]; R2 = (c2 == 2*m)?INT_MAX:nums2[c2/2]; cout<<"L1:"<<L1<<" R1:"<<R1<<endl; cout<<"L2:"<<L2<<" R2:"<<R2<<endl; if(L1 > R2) hi = c1-1; else if(L2 > R1) lo = c1+1; else break; } return (max(L1,L2)+ min(R1,R2))/2.0; }