========坚持30天刷leetcode=====
题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
这题有点难,看网上的答案也有点难消化,下面这一段代码理解不了。有懂的麻烦跟我说说
i1=min(int(k/2),m)
i2=k-i1
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
m=len(nums1)
n=len(nums2)
total=m+n
if total & 0x1: #奇数
return(self.find_kth(nums1,m,nums2,n,int(total/2+1)))
else: # 偶数
return((self.find_kth(nums1,m,nums2,n,int(total/2))+self.find_kth(nums1,m,nums2,n,int(total/2+1)))/2.0)
def find_kth(self,nums1,m,nums2,n,k): #找到第 K 大的数
if m>n:
return(self.find_kth(nums2,n,nums1,m,k))
if m==0:
return(nums2[k-1])
if k==1:
return(min(nums1[0],nums2[0]))
i1=min(int(k/2),m)
i2=k-i1
# 注意每次都要修改哪些值
if nums1[i1-1]<nums2[i2-1]:
#print(1,nums1[i1-1],nums2[i2-1])
return(self.find_kth(nums1[i1:],m-i1,nums2,n,k-i1))
elif nums1[i1-1]>nums2[i2-1]:
#print(2,nums1[i1-1],nums2[i2-1])
#print(nums1,m,nums2[i2:],n-i2,k-i2)
return(self.find_kth(nums1,m,nums2[i2:],n-i2,k-i2))
else:
#print(nums1[i1-1])
return(nums1[i1-1])