- 寻找两个正序数组的中位数
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
二分法
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
def find(nums1, i, nums2, j, k):
"""
:i是nums1的开始点
:j是nums2的开始点
:k是二分点
"""
# print(i,j, k )
if i >= len(nums1): return nums2[j+k-1]
if j >= len(nums2): return nums1[i+k-1]
if k ==1: return min(nums1[i], nums2[j])
if (i + k / 2 - 1 < len(nums1)):
midval1= nums1[i + k / 2 - 1]
else:
midval1 = float("inf")
if (j + k / 2 - 1 < len(nums2)) :
midval2= nums2[j + k / 2 - 1 ]
else:
midval2 = float("inf")
if midval1 < midval2:
return find(nums1, i + k / 2, nums2, j, k- k / 2)
else:
return find(nums1, i, nums2, j + k /2, k -k /2)
m, n = len(nums1), len(nums2)
left, right = (m + n + 1) /2 , (m + n + 2) /2
return (find(nums1, 0, nums2, 0, left) + find(nums1, 0, nums2, 0, right)) /2.0