classSolution: deffindMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: count = 0 i = 0 j = 0 m = len(nums1) n = len(nums2) left = -1 right = -1 while count <= (m+n)//2and i < m and j < n: left = right if nums1[i] < nums2[j]: right = nums1[i] i += 1 else: right = nums2[j] j += 1 count += 1 while count <= (m+n)//2and i < m: left = right right = nums1[i] i += 1 count += 1 while count <= (m+n)//2and j < n: left = right right = nums2[j] j += 1 count += 1 # if i < m and (j >= n or nums1[i] < nums2[j]): # right = nums1[i] # i += 1 # else: # right = nums2[j] # j += 1 # count += 1 if (m+n) % 2 == 0: ans = (left + right) / 2 else: ans = right return ans
classSolution: deffindMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: m = len(nums1) n = len(nums2) if m > n: return self.findMedianSortedArrays(nums2, nums1) total_left = (m+n+1)//2 left = 0 right = m while left < right: i = left + (right - left + 1) // 2 j = total_left - i # i的范围是[1, m], 所以i-1不会越界 if nums1[i-1] > nums2[j]: # A数组左边大,说明分割线太靠右了,需要左移 right = i - 1 else: left = i i = left j = total_left - i first_left = nums1[i-1] if i > 0elsefloat('-inf') first_right = nums1[i] if i < m elsefloat('inf') second_left = nums2[j-1] if j > 0elsefloat('-inf') second_right = nums2[j] if j < n elsefloat('inf')