| 12345678910111213141516171819202122232425262728 | 
							- class Solution {
 
-     public double findMedianSortedArrays(int[] nums1, int[] nums2) {
 
-         if (nums2.length < nums1.length) return findMedianSortedArrays(nums2, nums1);
 
-         int m = nums1.length, n = nums2.length;
 
-         int k = (m + n + 1) / 2;
 
-         int beg1 = 0, end1 = m;
 
-         while (beg1 <= end1) {
 
-             int i = beg1 + (end1 - beg1) / 2;
 
-             int j = k - i;
 
-             if (0 < i && nums2[j] < nums1[i - 1]) {
 
-                 end1 = i - 1; // Take too much
 
-             } else if (i < m && nums1[i] < nums2[j - 1]) {
 
-                 beg1 = i + 1; // Take too little
 
-             } else {
 
-                 int maxOfLeft = 0, minOfRight = 0;
 
-                 if (i == 0) maxOfLeft = nums2[j - 1];
 
-                 else if (j == 0) maxOfLeft = nums1[i - 1];
 
-                 else maxOfLeft = Math.max(nums1[i-1], nums2[j-1]);
 
-                 if (((m + n) & 1) == 1) return (double) maxOfLeft;
 
-                 if (i == m) minOfRight = nums2[j];
 
-                 else if (j == n) minOfRight = nums1[i];
 
-                 else minOfRight = Math.min(nums1[i], nums2[j]);
 
-                 return (maxOfLeft + minOfRight) / 2.0;
 
-             }
 
-         }
 
-         return -1.0;
 
-     }
 
- }
 
 
  |