Leetcode_04【寻找两个有序数组的中位数】

文章目录:

  • 题目
  • 脚本一及注释
  • 脚本一逻辑

题目:

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0
示例 2:

nums1 = [1, 2]
nums2 = [3, 4]

则中位数是 (2 + 3)/2 = 2.5


脚本一及注释:【116ms】

class Solution:                                          #leetcode固定格式
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:  #leetcode固定格式
        len1 = len(nums1)             #获取第一个列表的长度             
        len2 = len(nums2)             #获取第二个列表的长度
        nums3 = nums1 + nums2           #合并两个列表
        nums3.sort()                #将合并后的列表进行升序排序
        num = (len1 + len2)%2           #将两列表长度取和后除以2取余数,用于判断合并列表的元素个数是单数还是双数
        num1 = int((len1 + len2) / 2)          #求合并列表的个数的中间数,并取整数
        if(num == 0):                #如果余数为0,合并列表元素个数为偶数,进入相应的语句取中间数
            return((nums3[num1]+nums3[num1-1])/2)
        else:                     #如果合并列表为奇数,则直接获取相应的中间数即可     
            return(nums3[num1])

脚本一逻辑:

  • 合并列表
  • 列表排序
  • 判断合并列表元素个数,然后根据奇数或者偶数采取不同的措施
原文地址:https://www.cnblogs.com/mailong/p/11996833.html