加油!
目录
一、题目
给定两个大小为 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]