LeetCode学习第二天(两数组求中位数)

加油!

目录

一、题目

二、分析

三、代码:


一、题目

给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。


二、分析

因为这是两个有序数组,在两个有序数组中寻找中位数,可以先考虑将两个数组合并起来,然后找中位数

有序数组的合并比较简单,就是用两个指针分别指向两个数组的开头,依次比较指针指向的数字,较少的数字添加到新数组,指针加1,然后再重复以上的循环,直至其中一个指针越界。最后将未添加完的数字合并到新数组中


三、代码:

def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
    m = 0
    n = 0
    r1 = len(nums1)
    r2 = len(nums2)
    arr = []
    while True: 
        if m>r1-1 or n>r2-1: 
            break
        if nums1[m] > nums2[n]:
            arr.append(nums2[n])
            n+=1
        else:
            arr.append(nums1[m])
            m+=1
	   if m!=r1:
        arr.extend(nums1[m:])
    elif n!=r2:
        arr.extend(nums2[n:])
       if (r1+r2)%2==0:
        return (arr[((r1+r2)//2)-1]+arr[(r1+r2)//2])/2
    else:
        return arr[(r1+r2)//2]


 

猜你喜欢

转载自blog.csdn.net/m0_51786204/article/details/129787432