leetcode-python-day5-第4题

========坚持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])  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值