本文共 2012 字,大约阅读时间需要 6 分钟。
??????????????????????????
nums????????????i?j??????????????index1?index2??????????????????????????
class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int len1 = nums1.length, len2 = nums2.length; int totalLength = len1 + len2; if (totalLength % 2 == 1) { int midIndex = totalLength / 2; return getKthElement(nums1, nums2, midIndex + 1); } else { int midIndex1 = totalLength / 2 - 1; int midIndex2 = totalLength / 2; double median = (getKthElement(nums1, nums2, midIndex1 + 1) + getKthElement(nums1, nums2, midIndex2 + 1)) / 2.0; return median; } } public int getKthElement(int[] nums1, int[] nums2, int k) { int l1 = nums1.length, l2 = nums2.length; int i = 0, j = 0; while (true) { if (i == l1) return nums2[j + k - 1]; if (j == l2) return nums1[i + k - 1]; if (k == 1) return Math.min(nums1[i], nums2[j]); int half = k / 2; int ni1 = Math.min(i + half, l1) - 1; int ni2 = Math.min(j + half, l2) - 1; int p1 = nums1[ni1], p2 = nums2[ni2]; if (p1 <= p2) { k -= (ni1 - i + 1); i = ni1 + 1; } else { k -= (ni2 - j + 1); j = ni2 + 1; } } }} ?????????????????????????????????????????????????????????????????????????
转载地址:http://qtqk.baihongyu.com/