4. Median of Two Sorted Arrays
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3] nums2 = [2] The median is 2.0
Example 2:
nums1 = [1, 2] nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
解题思路:参考https://discuss.leetcode.com/topic/16797/very-concise-o-log-min-m-n-iterative-solution-with-detailed-explanation
找到一个L1<=R1&&L1<=R2&&L2<=R1&&L2<=R2的这个切入位置。切完之后两边的长度是相同的所以会有 切入点1+切入点2=N1+N2
class Solution { public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int N1=nums1.size(),N2=nums2.size(); if(N1<N2) return findMedianSortedArrays(nums2,nums1); if(N2==0) return (nums1[N1/2]+nums1[(N1-1)/2])/2.0; int low=0,mid1,mid2,high=N2*2; while(low<=high){ mid2=(low+high)>>1; //cut nums2 cut1+cut=N1+N2 mid1=N1+N2-mid2; double L1=mid1==0?INT_MIN:nums1[(mid1-1)/2]; double R1=mid1==N1*2?INT_MAX:nums1[mid1/2]; double L2=mid2==0?INT_MIN:nums2[(mid2-1)/2]; double R2=mid2==N2*2?INT_MAX:nums2[mid2/2]; if(L1>R2)low=mid2+1; else if(L2>R1)high=mid2-1; else return (max(L1,L2)+min(R1,R2))/2; } return -1; } };