4. Median of Two Sorted Arrays
https://leetcode.com/problems/median-of-two-sorted-arrays/
solution
merge sort
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
res = []
i = j = 0
while i < len(nums1) and j < len(nums2):
if nums1[i] < nums2[j]:
res.append(nums1[i])
i += 1
else:
res.append(nums2[j])
j += 1
if i < len(nums1):
res += nums1[i:]
elif j < len(nums2):
res += nums2[j:]
if len(res) % 2 == 1:
return res[(len(res) - 1) // 2]
else:
return (res[len(res) // 2] + res[len(res) // 2 - 1]) / 2时间复杂度:O() 空间复杂度:O()
二分查找
找中位数是find kth largest element的特殊情况将一个集合划分为两个长度相等的子集,其中一个子集中的元素总是大于另一个子集中的元素。
第一个数组a,第二个数组b,如果确认中位数在第一个数组的 [l,r] 之间或者在第二个数组的 [L,R] 之间,记 mid1=(l+r)/2,mid2=(L+R)/2,这会将 [l,r] 和 [L,R] 分成四个区间,比较 a[mid1] 和 b[mid2] 可以得到哪个区间中一定没有中位数,然后对应把 l,r,L,R 中的某一个修改成 mid1 或者 mid2。这样每次待定的区间长度会减少四分之一,复杂度为 logN
时间复杂度:O() 空间复杂度:O()
heap
follow up
Last updated