找两个数组合并后的中位数
时间: 2023-09-14 17:08:45 浏览: 160
可以使用归并排序的思想,在合并两个有序数组的过程中,同时找到中位数。
具体做法如下:
1. 定义两个指针i和j,分别指向两个数组的起始位置。
2. 计算两个数组的总长度,如果总长度为奇数,则中位数为合并后的第 (len+1)/2 个数;如果总长度为偶数,则中位数为合并后的第 len/2 个数和第 len/2+1 个数的平均值。
3. 在循环中,比较两个数组当前位置上的数,将较小的数放入合并后的数组中,同时更新指针。
4. 当合并后的数组长度达到中位数所在位置时,即可得到中位数。
代码如下:
```python
def findMedianSortedArrays(nums1: List[int], nums2: List[int]) -> float:
m, n = len(nums1), len(nums2)
len_total = m + n
i, j = 0, 0
nums = []
while i < m and j < n:
if nums1[i] < nums2[j]:
nums.append(nums1[i])
i += 1
else:
nums.append(nums2[j])
j += 1
if len(nums) == (len_total + 1) // 2:
if len_total % 2 == 0:
return (nums[-1] + nums[-2]) / 2
else:
return nums[-1]
if i < m:
nums += nums1[i:]
if j < n:
nums += nums2[j:]
if len_total % 2 == 0:
return (nums[-1] + nums[-2]) / 2
else:
return nums[-1]
```
阅读全文