class Solution: def findMedianSortedArrays(self, nums1: list[int], nums2: list[int]) -> float: if len(nums1) <= len(nums2): A, B = nums1, nums2 else: A, B = nums2, nums1 half_total = (len(A) + len(B)) // 2 lo, hi = 0, len(A) while True: i = (lo + hi) // 2 j = half_total - i Aleft = A[i - 1] if i > 0 else float("-inf") Aright = A[i] if i < len(A) else float("inf") Bleft = B[j - 1] if j > 0 else float("-inf") Bright = B[j] if j < len(B) else float("inf") if Aleft > Bright: hi = i - 1 elif Bleft > Aright: lo = i + 1 else: if (len(A) + len(B)) % 2 != 0: return min(Aright, Bright) else: return (max(Aleft, Bleft) + min(Aright, Bright)) / 2