// Online Java Compiler
// Use this editor to write, compile and run your Java code online
public class MedianOfTwoSortedArrays {
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int m = nums1.length;
int n = nums2.length;
if (m > n) {
int[] temp = nums1;
nums1 = nums2;
nums2 = temp;
int tempLen = m;
m = n;
n = tempLen;
}
int low = 0;
int high = m;
while (low <= high) {
int partitionX = (low + high) / 2;
int partitionY = (m + n + 1) / 2 - partitionX;
int maxX = (partitionX == 0) ? Integer.MIN_VALUE : nums1[partitionX - 1];
int minX = (partitionX == m) ? Integer.MAX_VALUE : nums1[partitionX];
int maxY = (partitionY == 0) ? Integer.MIN_VALUE : nums2[partitionY - 1];
int minY = (partitionY == n) ? Integer.MAX_VALUE : nums2[partitionY];
if (maxX <= minY && maxY <= minX) {
if ((m + n) % 2 == 0) {
return (double) (Math.max(maxX, maxY) + Math.min(minX, minY)) / 2;
} else {
return (double) Math.max(maxX, maxY);
}
} else if (maxX > minY) {
high = partitionX - 1;
} else {
low = partitionX + 1;
}
}
throw new IllegalArgumentException("Input arrays are not sorted.");
}
public static void main(String[] args) {
int[] nums1 = {3, 2, 3};
int[] nums2 = {8, 6};
System.out.println(findMedianSortedArrays(nums1, nums2)); // Output: 2.0
}
}