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
left = 0
right = La - 1
while True: # ERROR: left <= right
i = (left + right)
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