4. Median of Two Sorted Arrays

·

1 min read

Problem Link

class Solution:
    def findMedianSortedArrays(self, A: List[int], B: List[int]) -> float:
        if len(A) > len(B):
            return self.findMedianSortedArrays(B, A)
        La, Lb = len(A), len(B)
        total = La + Lb
        half = total // 2
        left = 0
        right = La - 1
        while True: # ERROR: left <= right
            i = (left + right) // 2
            j = half - i - 2
            aLeft = A[i] if i >= 0 else float("-infinity")
            bLeft = B[j] if j >= 0 else float("-infinity")
            aRight = A[i + 1] if i+1 < La else float("infinity")
            bRight = B[j + 1] if j+1 < Lb else float("infinity")
            if aLeft <= bRight and bLeft <= aRight:
                # if length of La + Lb is even
                if total % 2 == 0:
                    return (max(aLeft, bLeft) + min(aRight, bRight)) / 2
                # if odd
                else:
                    return min(aRight, bRight)
            elif aLeft > bRight:
                right = i - 1
            else:
                left = i + 1