描述:
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
解答:
核心思想是利用二分法
class Solution:
def getKth(self,nums1,nums2,k):
if len(nums1) == 0:
return nums2[k]
elif len(nums2) == 0:
return nums1[k]
elif len(nums1) + len(nums2) - 1 == k:
return max(nums1[-1],nums2[-1])
else:
if len(nums1) > len(nums2):
nums1,nums2 = nums2,nums1
i = len(nums1)//2
j = k - i
if nums1[i] < nums2[j]:
return self.getKth(nums1[i:],nums2[:j],j)
else:
return self.getKth(nums1[:i],nums2[j:],i)
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
if (len(nums1) + len(nums2)) % 2 == 1:
return self.getKth(nums1,nums2,(len(nums1) + len(nums2))//2)
else:
return (self.getKth(nums1,nums2,(len(nums1) + len(nums2))//2) + self.getKth(nums1,nums2,(len(nums1) + len(nums2))//2-1))/2