LeetCode第三天

题目一:

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0

示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5

代码

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        l1=len(nums1)
        l2=len(nums2)
        li1=li2=0
        ri1=l1-1
        ri2=l2-1
        while(li1<=ri1 and li2<=ri2 and (li1!=ri1 or li2!=ri2) and l1*l2!=0):
            if nums1[li1]<nums2[li2]:
                li1=li1+1
            else:
                li2=li2+1
            if nums1[ri1]>=nums2[ri2]:
                ri1=ri1-1
            else:
                ri2=ri2-1
        print(li1,ri1,li2,ri2)
        if li1>ri1:
            #求nums2[li2,ri2]中位数
            res=(ri2-li2)%2
            mid=(ri2+li2)//2
            print(mid)
            if res>0:
                return (nums2[mid]+nums2[mid+1])/2
            else:
                return nums2[mid]
        elif(li2>ri2):
            #求nums1[li1,ri1]中位数
            res=(ri1-li1)%2
            mid=(ri1+li1)//2
            if res>0:
                return (nums1[mid]+nums1[mid+1])/2
            else:
                return nums1[mid]
        else:
            return (nums1[li1]+nums2[li2])/2
            
                

猜你喜欢

转载自blog.csdn.net/yuandong_D/article/details/88880300