文章目录
- 题目
- 答案
- 运行结果
题目
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:
输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
- nums1.length == m
- nums2.length == n
- 0 <= m <= 1000
- 0 <= n <= 1000
- 1 <= m + n <= 2000
- -10^6 <= nums1[i], nums2[i] <= 10^6
答案
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
m = len(nums1)
n = len(nums2)
lens = m + n
left, right = -1, -1 # 分割线左右两边的值
aStart, bStart = 0, 0 # 两个数组的开始下标
for i in range(lens//2 + 1): # 只用遍历到中值即可
left = right # 右边界赋值给左边界
if aStart < m and (bStart >= n or nums1[aStart] < nums2[bStart]): # 1数组还有值,并且1数组当前下标对应的值小于2数组当前下标对应的值或者2数组已经遍历完毕
right = nums1[aStart] # 则将1数组当前下标对应的值赋给右边界
aStart += 1 # 下标右移一位,判断下一个
else: # 与上个判断类似
right = nums2[bStart]
bStart += 1
if (lens & 1) == 0: # 按位与运算判断长度奇偶
return (left+right)/2.0 # 为偶数的情况
else:
return right
运行结果