public double findMedianSortedArrays(int[] nums1, int[] nums2) { if(nums1.length > nums2.length){ return findMedianSortedArrays(nums2, nums1); } int cut1=0; int cut2=0; int len = nums1.length+nums2.length; int cutL = 0; int cutR = nums1.length; while(cut1 <= nums1.length){ cut1 = (cutR-cutL)/2 + cutL; cut2 = len/2 - cut1; double left1 = (cut1==0)?Integer.MIN_VALUE:nums1[cut1-1]; double left2 = (cut2==0)?Integer.MIN_VALUE:nums2[cut2-1]; double right1 = (cut1==nums1.length)?Integer.MAX_VALUE:nums1[cut1]; double right2 = (cut2==nums2.length)?Integer.MAX_VALUE:nums2[cut2]; if(left1 > right2){ cutR = cut1 -1; }else if(left2 > right1){ cutL = cut1+1; }else{ if(len % 2 == 0){ left1 = left1 > left2 ? left1:left2; right1 = right1 > right2 ? right2 : right1; return ( left1 + right1 )/2; }else{ right1 = (right1 > right2 ? right2 : right1); return right1; } } } return -1; }