Median of Two Sorted Arrays
ID: 4; hard
Solution 1 (Java)
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int N = nums1.length + nums2.length;
if (N % 2 == 0) {
return (findKthNumber(nums1, 0, nums2, 0, N / 2)
+ findKthNumber(nums1, 0, nums2, 0, N / 2 + 1)) / 2;
}
return findKthNumber(nums1, 0, nums2, 0, N / 2 + 1);
}
private double findKthNumber(int[] A, int startOfA, int[] B, int startOfB, int k) {
if (startOfA >= A.length) {
return B[startOfB + k - 1];
}
if (startOfB >= B.length) {
return A[startOfA + k - 1];
}
if (k == 1) {
return Math.min(A[startOfA], B[startOfB]);
}
int halfKthOfA = startOfA + k / 2 - 1 >= A.length ? Integer.MAX_VALUE : A[startOfA + k / 2 - 1];
int halfKthOfB = startOfB + k / 2 - 1 >= B.length ? Integer.MAX_VALUE : B[startOfB + k / 2 - 1];
if (halfKthOfA < halfKthOfB) {
return findKthNumber(A, startOfA + k / 2, B, startOfB, k - k / 2);
} else {
return findKthNumber(A, startOfA, B, startOfB + k / 2, k - k / 2);
}
}
}Notes
Last updated