04寻找两个数组的中位数

from typing import List
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
# 这样写可以不用判断两个数组和为奇数和偶数的情况
index1 = (len(nums1) + len(nums2) + 1) // 2
index2 = (len(nums1) + len(nums2) + 2) // 2
# 寻找两个数组第k小的数字
def dfs(num_list1,num_list2,k):
# 使用让num_list1为数组长度大的数组
if len(num_list1) < len(num_list2):
num_list1,num_list2 = num_list2,num_list1
# 若有一个数组为空,可直接返回
if len(num_list2) == 0:return num_list1[k - 1]
if k == 1:
return min(num_list1[0],num_list2[0])
# 防止溢出
t = min(len(num_list2),k // 2)
# 每次切割出一部分数组,
if num_list1[t - 1] >= num_list2[t - 1]:
return dfs(num_list1,num_list2[t:],k - t)
else:
return dfs(num_list1[t:],num_list2,k - t)
return (dfs(nums1,nums2,index1) + dfs(nums1,nums2,index2)) / 2




posted @ 2020-07-06 10:34  月为暮  阅读(218)  评论(0编辑  收藏  举报