题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays/
代码
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
#思路:有序扔除一些数,直到扔出一半
l=len(nums1)+len(nums2)
# 确定奇数个还是偶数个数
if l%2 :
return self.iter_fun(nums1,nums2,l//2) # 奇数个取中间的数
else:
return (self.iter_fun(nums1,nums2,l//2)+self.iter_fun(nums1,nums2,l//2-1))/2 #偶数个取中间两数的平方
def iter_fun(self,nums1,nums2,k) :
# 递归出口
if not nums1:
return nums2[k]
if not nums2:
return nums1[k]
id1,id2=len(nums1)//2,len(nums2)//2
median1,median2=nums1[id1],nums2[id2]
#更新数组及下标
if id1+id2<k:
if median1>median2:
return self.iter_fun(nums1,nums2[id2+1:],k-id2-1)
else:
return self.iter_fun(nums1[id1+1:],nums2,k-id1-1)
else:
if median1>median2:
return self.iter_fun(nums1[:id1],nums2,k)
else:
return self.iter_fun(nums1,nums2[:id2],k)
思路详解
一个字:扔,直到扔掉有序数组左边的一半,或者只有一个数组的情况
注意点
整体思路扔小值,所以当扔大值部分,k不需要改变,只需要改变下标