题目描述:给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
示例
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
基本思想:
采用双指针的方法,因为两个数组是有序数组,当走了总长度一半的步数时,这个位置的值就是中位数。当然如果总长度为偶数,则需要计算总长度中间的值以及这个值的上一个值之和并除以2,如果是奇数,则只需要找到总长度中间的值即可。
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
m = len(nums1) # 把nums1的长度赋给m
n = len(nums2) # 把nums2的长度赋给n
l1 = l2 = 0 # 设l1和l2的指针指向两数组的起始点
left = right = 0 # 记录指针指向的值
target = (m + n) // 2 # 表示走的步数,最大值为总长度的一半向上取整
for i in range(target + 1): # 循环到总长度的一半,即为中位数
left = right # 把right的前一个值给left保存
if l1 < m and (l2 >= n or nums1[l1] < nums2[l2]):
right = nums1[l1]
l1 += 1
else:
right = nums2[l2]
l2 += 1
if (m + n) % 2 == 1:
return right
else:
return (left + right) / 2