当前位置 博文首页 > 明圣的博客:4. 寻找两个正序数组的中位数
普通解法:合并数组,并且保证新数组也为正序,得到新数组nums3,然后可以直接根据新数组长度定位中位数。
其中有两个特殊情况:1、nums1和nums2的长度加起来为1;
2、其中一个是空数组(这里不包含第一种特殊情况)
下面是代码,不知道为什么,粘贴进来格式不规整了
csclass Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
len1 = len(nums1)
len2 = len(nums2)
#特殊情况1,nums1 or nums2 长度加起来为1
if (len1+len2) == 1 :
if len1 == 1 :
return float(nums1[0])
if len2 == 1 :
return float(nums2[0])
#特殊情况2,其中一个数组为空
if len10 :
if len2%21:
return float(nums2[(len2//2)])
else :
return float((nums2[(len2//2)]+nums2[(len2//2)-1])/2)
if len20:
if len1%21:
return float(nums1[(len1//2)])
else :
return float((nums1[(len1//2)]+nums1[(len1//2)-1])/2)
#普通情况,合并两个数组的同时进行比较,得到一个新的正序数组
nums3 = []
i,j = 0,0
while i<len1 or j<len2 :
if i<len1 and j<len2 :
if nums1[i] <= nums2[j]:
nums3.append(nums1[i])
i += 1
else :
nums3.append(nums2[j])
j += 1
if i == len1 :
while j < len2 :
nums3.append(nums2[j])
j += 1
if j == len2 :
while i < len1 :
nums3.append(nums1[i])
i += 1
#从新数组找出中位数
len3 = len(nums3)
if len3%2==1:
return float(nums3[(len3//2)])
else :
return float((nums3[(len3//2)]+nums3[(len3//2)-1])/2) `