二分查找篇
如果使用之前的两个指针分别遍历再合并的话就已经超过时间复杂度了。。
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m=nums1.length;
int n=nums2.length;
if(m>n){
return findMedianSortedArrays(nums2,nums1);
}
int totalLeft=(m+n+1)/2;
int left=0;
int right=m;
while(left<right){
int i=(left+right+1)/2;
int j=totalLeft-i;
if(nums1[i-1]<=nums2[j]){
left=i;
}else{
right=i-1;
}
}
int i=left;
int j=totalLeft-i;
int nums1LeftMax=i==0?Integer.MIN_VALUE:nums1[i-1];
int nums2LeftMax=j==0?Integer.MIN_VALUE:nums2[j-1];
int nums1RightMin=i==m?Integer.MAX_VALUE:nums1[i];
int nums2RightMin=j==n?Integer.MAX_VALUE:nums2[j];
if((m+n)%2==1){
return Math.max(nums1LeftMax,nums2LeftMax);
}else{
return (Math.max(nums1LeftMax,nums2LeftMax)+Math.min(nums1RightMin,nums2RightMin))/2.0;
}
}
}