Median of Two Sorted Arrays
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
if (len(nums1) + len(nums2)) % 2 == 1:
return self.findk(nums1, nums2, (len(nums1) + len(nums2) + 1) // 2)
else:
return (self.findk(nums1, nums2, (len(nums1) + len(nums2)) // 2) + self.findk(nums1, nums2, (len(nums1) + len(nums2)) // 2 + 1)) / 2
def findk(self, nums1, nums2, k):
l1= len(nums1)
l2 = len(nums2)
if l1 > l2:
return self.findk(nums2, nums1, k)
if l1 == 0:
return nums2[k-1]
if k == 1:
return min(nums1[0], nums2[0])
a = min(k // 2, l1)
b = k - a
if nums1[a - 1] < nums2[b- 1]:
return self.findk(nums1[a:], nums2, k - a)
elif nums1[a - 1] > nums2[b- 1]:
return self.findk(nums1, nums2[b:], k - b)
else:
return nums1[a - 1]