HOT 100 › 索引 › B11 二分查找 Binary Search
LC 4寻找两个正序数组的中位数Median of Two Sorted Arrays 困难
给定两个升序数组,在 O(log(m+n)) 时间内找出合并后整体的中位数并返回。
思路 在较短数组上二分切分点 i,j=(m+n+1)//2-i;校验左半最大 <= 右半最小(边界用 ±inf),奇取左最大、偶取两侧均值。
class Solution: def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float: if len(nums1) > len(nums2): nums1, nums2 = nums2, nums1 m, n = len(nums1), len(nums2) total = m + n lo, hi = 0, m while lo <= hi: i = (lo + hi) // 2 j = (total + 1) // 2 - i a1 = nums1[i - 1] if i else float("-inf") a2 = nums1[i] if i < m else float("inf") b1 = nums2[j - 1] if j else float("-inf") b2 = nums2[j] if j < n else float("inf") if a1 <= b2 and b1 <= a2: if total % 2: return max(a1, b1) return (max(a1, b1) + min(a2, b2)) / 2 if a1 > b2: hi = i - 1 else: lo = i + 1 return 0.0