当前位置 博文首页 > 明圣的博客:4. 寻找两个正序数组的中位数

    明圣的博客:4. 寻找两个正序数组的中位数

    作者:[db:作者] 时间:2021-08-07 15:41

    普通解法:合并数组,并且保证新数组也为正序,得到新数组nums3,然后可以直接根据新数组长度定位中位数。
    其中有两个特殊情况:1、nums1和nums2的长度加起来为1;
    2、其中一个是空数组(这里不包含第一种特殊情况)

    下面是代码,不知道为什么,粘贴进来格式不规整了

    class 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%2
    1:
    return float(nums2[(len2//2)])
    else :
    return float((nums2[(len2//2)]+nums2[(len2//2)-1])/2)
    if len20:
    if len1%2
    1:
    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) `

    cs
    下一篇:没有了