Loading

[Python手撕]两个升序数组的中位数

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:

        nums1_len = len(nums1)
        nums2_len = len(nums2)

        def find(nums1,nums2,k):
            # time.sleep(1)
            if not nums1:
                return nums2[k-1]
            if not nums2:
                return nums1[k-1]
            
            if k == 1:
                if nums1 and nums2:
                    return min(nums1[0],nums2[0])
                if nums1:
                    return nums1[0]
                if nums2:
                    return nums2[0]
            
            nums1_len = len(nums1)
            nums2_len = len(nums2)

            index = k//2
            if index <= nums1_len and index <= nums2_len:
                if nums1[index-1]<nums2[index-1]:
                    return find(nums1[index:],nums2,k-index)
                elif nums1[index-1]>=nums2[index-1]:
                    return find(nums1,nums2[index:],k-index)
            else:
                if index>nums1_len:
                    index1 = nums1_len
                    index2 = k - nums1_len
                else:
                    index2 = nums2_len
                    index1 = k - nums2_len

                if nums1[index1-1]<nums2[index2-1]:
                    return find(nums1[index1:],nums2,k-index1)
                elif nums1[index1-1]>=nums2[index2-1]:
                    return find(nums1,nums2[index2:],k-index2)

        if (nums1_len+nums2_len)%2 == 0:
            left = find(nums1,nums2,(nums1_len+nums2_len)//2)
            right = find(nums1,nums2,(nums1_len+nums2_len)//2+1)
            return ((left+right)/2) 
        else:
            return (find(nums1,nums2,(nums1_len+nums2_len)//2+1)) 
posted @   Duancf  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示