4. Median of Two Sorted Arrays

题目链接: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不需要改变,只需要改变下标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值