class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n = nums1.length + nums2.length;
if (n % 2 == 0) {
int k = n / 2;
int x = findKth(nums1, 0, nums2, 0, k + 1);
int y = findKth(nums1, 0, nums2, 0, k);
return (x + y) / 2.;
}
else {
int x = findKth(nums1, 0, nums2, 0, n / 2 + 1);
return x;
}
}
public int findKth(int[] nums1, int i, int[] nums2, int j, int k) {
if (nums1.length - i > nums2.length - j) return findKth(nums2, j, nums1, i, k);
if (k == 1) {
if (nums1.length == i) return nums2[j];
else return Math.min(nums1[i], nums2[j]);
}
if (nums1.length == i) return nums2[j + k - 1];
int si = Math.min(i + k / 2, nums1.length), sj = j + k / 2;
if (nums1[si - 1] < nums2[sj - 1]) {
return findKth(nums1, si, nums2, j, k - (si - i));
}
else {
return findKth(nums1, i, nums2, sj, k - (sj - j));
}
}
}
寻找两个正序数组的中位数
最新推荐文章于 2024-11-01 15:19:21 发布