4.寻找两个有序数组的中位数

问题描述:两个大小分别为m和n的有序数组,找出两数组的中位数。

输入:List[int] nums1,List[int] nums2

输出:float

要求:算法时间复杂度为O(log(m+n))

假设:两数组不会同时为空。

————————————————————

思考:

1、看到题目非常暴力的想法就是两个数组合并后用sort,然后直接得出中位数。but明显不符合时间复杂度要求。

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        nums=nums1+nums2
        nums.sort()
        n=len(nums)
        return float(nums[n//2]) if n%2!=0 else (nums[n//2]+nums[n//2-1])/2

这里学习大神的讲解,明白时间复杂度为O((m+n)log(m+n))。

2、标准的官方解答释采用二分法。

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        m,n=len(nums1),len(nums2)
        if m>n:
            m,n,nums1,nums2=n,m,nums2,nums1
        min_len,max_len=0,m
        count=(m+n+1)//2
        while min_len<=max_len:
            i=(min_len+max_len)//2
            j=count-i
            if i>0 and nums1[i-1]>nums2[j]:
                max_len=i-1
            elif i

3、前一题采用过双指针方法,顿时感觉这边也可以使用双指针来移动,不过总是写不好,直接学习大神的Code。并且附上时间复杂度为O(m+n)。

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        m,n,i,j,count=len(nums1),len(nums2),0,0,-1
        # >>向下做二进制操作,直接得到整数部分
        median_index=(m+n)>>1
        res=[0,0]
        while count

 

你可能感兴趣的:(leetcode学习)