4. Median of Two Sorted Arrays (Hard) - TengnanYao/daily_leetcode GitHub Wiki

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        if len(nums1) > len(nums2):
            nums1, nums2 = nums2, nums1
        m, n = len(nums1), len(nums2)
        l, r = 0, m
        while l <= r:
            m1 = (l + r) // 2
            m2 = (m + n + 1) // 2 - m1
            a = float("-inf") if m1 == 0 else nums1[m1 - 1]
            b = float("inf") if m1 == m else nums1[m1]
            c = float("-inf") if m2 == 0 else nums2[m2 - 1]
            d = float("inf") if m2 == n else nums2[m2]
            if a <= d and c <= b:
                if (m + n) % 2:
                    return max(a, c)
                else:
                    return (max(a, c) + min(b, d)) / 2.0
            elif a > d:
                r = m1 - 1
            else:
                l = m1 + 1