1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: n = len(nums1) + len(nums2) + 1 return (self.findKth(nums1, 0, nums2, 0, n // 2) + self.findKth(nums1, 0, nums2, 0, (n + 1) // 2)) / 2
def findKth(self, A: List[int], b1: int, B: List[int], b2: int, k) -> float: m, n = len(A) - b1, len(B) - b2 if m > n: return self.findKth(B, b2, A, b1, k) if m == 0: return B[b2 + k - 1] if k == 1: return min(A[b1], B[b2]) i, j = min(k // 2, m), min(k // 2, n) if A[b1 + i - 1] < B[b2 + j - 1]: return self.findKth(A, b1 + i, B, b2, k - i) return self.findKth(A, b1, B, b2 + j, k - j)
|