解题思路:
(1)使数组1的长度为最短的。
(2)将两个数组分成左半边和右半边:
下面是具体实现:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
if (nums1.length>nums2.length)
return findMedianSortedArrays(nums2,nums1);
int length1 = nums1.length;
int length2 = nums2.length;
//left的最大值mid1,right的最小值mid2
int mid1 = 0,mid2 = 0;
int left = 0,right = length1;
while (left<=right){
//将两个数组分成left,和righth两个相等(i为nums1的左,j位nums2的左)
int i = (left+right)/2;
int j = (length1+length2+1)/2-i;
//nums1左1的值
int nums_if1 = (i==0?Integer.MIN_VALUE:nums1[i-1]);
//nums1右1的值
int nums_ir1 = (i==length1?Integer.MAX_VALUE:nums1[i]);
//nums2左1的值
int nums_if2 = (j==0?Integer.MIN_VALUE:nums2[j-1]);
//nums2右1的值
int nums_ir2 = (j==length2?Integer.MAX_VALUE:nums2[j]);
if(nums_if1 <= nums_ir2){
mid1 = Math.max(nums_if1,nums_if2);
mid2 = Math.min(nums_ir1,nums_ir2);
left = i+1;
}else {
right = i-1;
}
}
return (length1+length2)%2==0?(mid1+mid2)/2.0:mid1;
}
}