给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
分析
设K=(len(nums1)+len(nums2))/2
当数组长度总和为奇数时,返回这两个数组合并后中第k小的数,
当数组长度总和为偶数时,返回这两个数组合并后中第k小的数与第k+1小的数的平均值。
设该函数为find_k()
至此有
def findMedianSortedArrays(nums1, nums2):
n=len(nums1)+len(nums2)
if n%2==1: return find_k(nums1,nums2,n//2+1)
else:return (find_k(nums1,nums2,n//2+1)+find_k(nums1,nums2,n//2))/2
def find_k(nums1,nums2,k):
为方便起见,始终让nums1为长度较小的数组
于是有
if(len(nums1)>len(nums2)):return find_k(nums2,nums1,k)
当nums1为空时,返回值便为nums2中第k-2个数字