""" 4. Median of Two Sorted Arrays Difficulty: Hard https://leetcode.com/problems/median-of-two-sorted-arrays/ ────────────────────────────────────────────────── Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). Example 1: Input: nums1 = [1,3], nums2 = [2] Output: 2.00000 Explanation: merged array = [1,2,3] and median is 2. Example 2: Input: nums1 = [1,2], nums2 = [3,4] Output: 2.50000 Explanation: merged array = [1,2,3,4] and median is (2 + 3) / 2 = 2.5. Constraints: • nums1.length == m • nums2.length == n • 0 <= m <= 1000 • 0 <= n <= 1000 • 1 <= m + n <= 2000 • -10^6 <= nums1[i], nums2[i] <= 10^6 """ class Solution: def findMedianSortedArrays(self, nums1: list[int], nums2: list[int]) -> float: if len(nums1) > len(nums2): return self.findMedianSortedArrays(nums2, nums1) m, n = len(nums1), len(nums2) left, right = 0, m while left <= right: partA = (left + right) // 2 partB = (m + n + 1) // 2 - partA maxLeftA = float("-inf") if partA == 0 else nums1[partA - 1] minRightA = float("inf") if partA == m else nums1[partA] maxLeftB = float("-inf") if partB == 0 else nums2[partB - 1] minRightB = float("inf") if partB == n else nums2[partB] if maxLeftA <= minRightB and maxLeftB <= minRightA: if (m + n) % 2 == 0: return (max(maxLeftA, maxLeftB) + min(minRightA, minRightB)) / 2 else: return max(maxLeftA, maxLeftB) elif maxLeftA > minRightB: right = partA - 1 else: left = partA + 1