70,020
社区成员




public class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
if ((null == nums1) || (null == nums2)) {
return 0;
}
int total = nums1.length + nums2.length;
int middle = total >> 1;
if (0 == (total & 0x01)) {
int val1 = findKthSortedArrays(nums1, 0, nums1.length, nums2, 0,
nums2.length, middle);
int val2 = findKthSortedArrays(nums1, 0, nums1.length, nums2, 0,
nums2.length, middle + 1);
return (val1 + val2) / 2.0;
} else {
return findKthSortedArrays(nums1, 0, nums1.length, nums2, 0,
nums2.length, middle + 1);
}
}
private int findKthSortedArrays(int[] nums1, int b1, int e1, int[] nums2,
int b2, int e2, int k) {
if (e1 - b1 > e2 - b2) {
return findKthSortedArrays(nums2, b2, e2, nums1, b1, e1, k);
}
if (b1 == e1) {
return nums2[b2 + k - 1];
} else if (1 == k) {
return Math.min(nums1[b1], nums2[b2]);
}
int i = Math.min(k / 2, e1 - b1);
int j = k - i;
int val1 = nums1[b1 + i - 1];
int val2 = nums2[b2 + j - 1];
if (val1 == val2) {
return val1;
} else if (val1 < val2) {
return findKthSortedArrays(nums1, b1 + i, e1, nums2, b2, e2, k - i);
} else {
return findKthSortedArrays(nums1, b1, e1, nums2, b2 + j, e2, k - j);
}
}
}