Faaez Razeen

Median of Two Sorted Arrays

  • 4 min read
  • LC-Hard
  • Binary-search

3 years ago

Solution

TimeSpaceExplanation
O(log(min(m, n)))O()
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: A, B = nums1, nums2 if len(A) > len(B): A, B = B, A total = len(A) + len(B) half = total // 2 l, r = 0, len(A) - 1 while True: a = (l + r) // 2 b = half - a - 2 a_left = A[a] if a >= 0 else -math.inf b_left = B[b] if b >= 0 else -math.inf a_right = A[a + 1] if a + 1 < len(A) else math.inf b_right = B[b + 1] if b + 1 < len(B) else math.inf if a_left <= b_right and b_left <= a_right: if total % 2 == 0: return (max(a_left, b_left) + min(a_right, b_right)) / 2 else: return min(a_right, b_right) elif a_left > b_right: r = a - 1 else: l = a + 1