注意如果i=(left+right)/2,那么当left=right-1时不再更新,将进入死循环。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size()>nums2.size()){
vector<int> tmp=nums1;
nums1=nums2;
nums2=tmp;
}
int m=nums1.size();
int n=nums2.size();
int all_left=(m+n+1)/2;
int left=0;
int right=m;
while(left<right){
int i=(left+right+1)/2;
int j=all_left-i;
if(nums1[i-1]>nums2[j]){
right=i-1;
}
else{
left=i;
}
}
int i=left;
int j=all_left-left;
int nums1leftMax=i==0?INT_MIN:nums1[i-1];
int nums2leftMax=j==0?INT_MIN:nums2[j-1];
int nums1rightMin=i==m?INT_MAX:nums1[i];
int nums2rightMin=j==n?INT_MAX:nums2[j];
cout<<nums1leftMax<<" "<<nums2leftMax<<" "<<nums1rightMin<<" "<<nums2rightMin<<endl;
if(((m+n)%2)==1){
return max(nums1leftMax,nums2leftMax);
}
else{
return (double) ((max(nums1leftMax,nums2leftMax)+min(nums1rightMin,nums2rightMin))/2.0);
}
}
};