# 寻找两个正序数组的中位数

<p>给定两个大小分别为 <code>m</code> 和 <code>n</code> 的正序（从小到大）数组 <code>nums1</code> 和 <code>nums2</code>。请你找出并返回这两个正序数组的 <strong>中位数</strong> 。</p><p> </p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>nums1 = [1,3], nums2 = [2]<strong><br />输出：</strong>2.00000<strong><br />解释：</strong>合并数组 = [1,2,3] ，中位数 2</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>nums1 = [1,2], nums2 = [3,4]<strong><br />输出：</strong>2.50000<strong><br />解释：</strong>合并数组 = [1,2,3,4] ，中位数 (2 + 3) / 2 = 2.5</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>nums1 = [0,0], nums2 = [0,0]<strong><br />输出：</strong>0.00000</pre><p><strong>示例 4：</strong></p><pre><strong>输入：</strong>nums1 = [], nums2 = [1]<strong><br />输出：</strong>1.00000</pre><p><strong>示例 5：</strong></p><pre><strong>输入：</strong>nums1 = [2], nums2 = []<strong><br />输出：</strong>2.00000</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>nums1.length == m</code></li>	<li><code>nums2.length == n</code></li>	<li><code>0 <= m <= 1000</code></li>	<li><code>0 <= n <= 1000</code></li>	<li><code>1 <= m + n <= 2000</code></li>	<li><code>-10<sup>6</sup> <= nums1[i], nums2[i] <= 10<sup>6</sup></code></li></ul><p> </p><p><strong>进阶：</strong>你能设计一个时间复杂度为 <code>O(log (m+n))</code> 的算法解决此问题吗？</p>

以下程序实现了这一功能，请你填补空白处内容：

```python
import math
from typing import List


class Solution:
    def findMedianSortedArrays(self, nums1: List[int],
                               nums2: List[int]) -> float:
        nums1Size = len(nums1)
        nums2Size = len(nums2)
        na = nums1Size + nums2Size
        ns = []
        i = 0
        j = 0
        m = int(math.floor(na / 2 + 1))
        while len(ns) < m:
            n = None
            if i < nums1Size and j < nums2Size:
                if nums1[i] < nums2[j]:
                    n = nums1[i]
                    i += 1
                else:
                    n = nums2[j]
                    j += 1
            elif i < nums1Size:
                n = nums1[i]
                i += 1
            elif j < nums2Size:
                n = nums2[j]
                j += 1
            ns.append(n)
        d = len(ns)
        if na % 2 == 1:
            return ns[d - 1]
        else:
            return _____________________;


# %%
s = Solution()
print(s.findMedianSortedArrays([1, 3], [2]))
```

## template

```python
import math
from typing import List


class Solution:
    def findMedianSortedArrays(self, nums1: List[int],
                               nums2: List[int]) -> float:
        nums1Size = len(nums1)
        nums2Size = len(nums2)
        na = nums1Size + nums2Size
        ns = []
        i = 0
        j = 0
        m = int(math.floor(na / 2 + 1))
        while len(ns) < m:
            n = None
            if i < nums1Size and j < nums2Size:
                if nums1[i] < nums2[j]:
                    n = nums1[i]
                    i += 1
                else:
                    n = nums2[j]
                    j += 1
            elif i < nums1Size:
                n = nums1[i]
                i += 1
            elif j < nums2Size:
                n = nums2[j]
                j += 1
            ns.append(n)
        d = len(ns)
        if na % 2 == 1:
            return ns[d - 1]
        else:
            return (ns[d - 1] + ns[d - 2]) / 2.0


# %%
s = Solution()
print(s.findMedianSortedArrays([1, 3], [2]))
```

## 答案

```python
(ns[d - 1] + ns[d - 2]) / 2.0
```

## 选项

### A

```python
(ns[d + 1] + ns[d + 2]) / 2.0
```

### B

```python
(ns[d - 1] - ns[d - 2]) / 2.0
```

### C

```python
(ns[d + 1] - ns[d + 2]) / 2.0
```