文章目录:
- 题目
- 脚本一及注释
- 脚本一逻辑
题目:
给定两个大小为 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])
脚本一逻辑:
- 合并列表
- 列表排序
- 判断合并列表元素个数,然后根据奇数或者偶数采取不同的措施