Median of two Sorted Arrays
nums1 = [1, 3] nums2 = [2] The median is 2.0nums1 = [1, 2] nums2 = [3, 4] The median is (2 + 3)/2 = 2.5
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
length = len(nums1) + len(nums2)
if length % 2 == 1:
return self.findKth(nums1, 0, nums2, 0, (length + 1) // 2) * 1.0
else:
return (self.findKth(nums1, 0, nums2, 0, length // 2)
+ self.findKth(nums1, 0, nums2, 0, length // 2 + 1)) / 2.0
def findKth(self, A, idxA, B, idxB, k):
if k == 1:
if idxA >= len(A):
return B[idxB]
elif idxB >= len(B):
return A[idxA]
else:
return min(A[idxA], B[idxB])
offset = k // 2 - 1
if idxA + offset >= len(A):
return self.findKth(A, idxA, B, idxB + offset + 1, k - k // 2)
elif idxB + offset >= len(B):
return self.findKth(A, idxA + offset + 1, B, idxB, k - k // 2)
elif A[idxA + offset] < B[idxB + offset]:
return self.findKth(A, idxA + offset + 1, B, idxB, k - k // 2)
else:
return self.findKth(A, idxA, B, idxB + offset + 1, k - k // 2)
Last updated
