4. Median of Two Sorted Arrays
Description
Given two sorted arrays nums1
and nums2
of size m
and n
respectively, return the median of the two sorted arrays.
The overall run time complexity should be O(log (m+n))
.
Example 1:
Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Explanation: merged array = [1,2,3] and median is 2.
Example 2:
Input: nums1 = [1,2], nums2 = [3,4] Output: 2.50000 Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5.
Constraints:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106
Solution
median-of-two-sorted-arrays.py
class Solution:
def findMedianSortedArrays(self, A: List[int], B: List[int]) -> float:
m, n = len(A), len(B)
if m > n: return self.findMedianSortedArrays(B, A)
half = (m + n + 1) // 2
left, right = 0, m
while left <= right:
i = (left + right) // 2
j = half - i
if i < m and j - 1 >= 0 and B[j - 1] > A[i]:
left = i + 1
elif i - 1 >= 0 and j < n and A[i - 1] > B[j]:
right = i - 1
else:
if i == 0:
left_max = B[j - 1]
elif j == 0:
left_max = A[i - 1]
else:
left_max = max(A[i - 1], B[j - 1])
if (m + n) & 1:
return left_max
if i == m:
right_min = B[j]
elif j == n:
right_min = A[i]
else:
right_min = min(A[i], B[j])
return (left_max + right_min) / 2