diff --git a/python_solutions/0004_median_of_two_sorted_array.py b/python_solutions/0004_median_of_two_sorted_array.py new file mode 100644 index 0000000..78c6c4e --- /dev/null +++ b/python_solutions/0004_median_of_two_sorted_array.py @@ -0,0 +1,32 @@ +class Solution { + public double findMedianSortedArrays(int[] nums1, int[] nums2) { + if (nums1.length > nums2.length) { + return findMedianSortedArrays(nums2, nums1); + } + + int x = nums1.length; + int y = nums2.length; + + int start = 0; + int end = x; + + while (start <= end) { + int partitionX = (start + end) / 2; + int partitionY = (x + y + 1) / 2 - partitionX; + int maxLeftX = (partitionX == 0) ? Integer.MIN_VALUE : nums1[partitionX - 1]; + int minRightX = (partitionX == x) ? Integer.MAX_VALUE : nums1[partitionX]; + int maxLeftY = (partitionY == 0) ? Integer.MIN_VALUE : nums2[partitionY - 1]; + int minRightY = (partitionY == y) ? Integer.MAX_VALUE : nums2[partitionY]; + + if (maxLeftX <= minRightY && maxLeftY <= minRightX) { + if ((x + y) % 2 == 0) { + return ((double)Math.max(maxLeftX, maxLeftY) + Math.min(minRightX, minRightY))/2; + } else { + return (double)Math.max(maxLeftX, maxLeftY);} + } else if (maxLeftX > minRightY) { + end = partitionX - 1;} else { + start = partitionX + 1;}} + + throw new IllegalArgumentException("Input arrays are not sorted"); + } +}