LeetCode4. Median of Two Sorted Arrays 发表于 2018-03-05 | 分类于 LeetCode | 代码思路 转化为查找第K个数 二分查找 点击显/隐代码 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length; int len2 = nums2.length; // 分治~二分查找 int low = 0; int high = len1; while (true) { // index1 代表 nums1 在左侧的个数,取值范围 [0,len1]; int index1 = low + (high - low) / 2; int index2 = (len1 - index1 + len2) / 2; // 对应的左边下边 int i = index1 - 1; int j = index2 - 1; // 边界情况 if (index1 == 0) { if (nums2[index2 - 1] <= nums1[index1]) { if(index2 == len2) return (nums1[index1] + nums2[index2-1])/2.0; return (nums2[index2 - 1] + Math.min(nums1[index1], nums2[index2])) / 2.0; } else { low = index1 + 1; } } else if (index2 == len2) { if (nums2[index2 - 1] <= nums1[index1]) { if(index1 == 0) return (nums1[index1] + nums2[index2-1])/2.0; return (Math.max(nums1[index1 - 1], nums2[index2 - 1]) + nums1[index1]) / 2.0; } else { // index1 取小了 low = index1 + 1; } } else if (index2 == 0) { if (nums1[index1 - 1] <= nums2[index2]) { if (index1 == len1) return (nums1[index1 - 1] + nums2[index2]) / 2.0; return (nums1[index1 - 1] + Math.min(nums1[index1], nums2[index2])) / 2.0; } else { high = index1; } } else if (index1 == len1) { if (nums1[index1 - 1] <= nums2[index2]) { if (index2 == 0) return (nums1[index1 - 1] + nums2[index2]) / 2.0; return (Math.max(nums1[index1 - 1], nums2[index2 - 1]) + nums2[index2]) / 2.0; } else { high = index1; } } else if (nums1[index1 - 1] <= nums2[index2] && nums2[index2 - 1] <= nums1[index1]) { return (Math.max(nums1[index1 - 1], nums2[index2 - 1]) + Math.min(nums1[index1], nums2[index2])) / 2.0; } else if (nums1[index1 - 1] > nums2[index2] || nums2[index2 - 1] > nums1[index1]) { high = index1; } else { low = index1; } } }