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

<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>

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

```cpp
class Solution
{
public:
	double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2)
	{
		int nums1Size = nums1.size();
		int nums2Size = nums2.size();
		int na = nums1Size + nums2Size;
		int *ns = (int *)malloc(4 * na);
		int i = 0, j = 0, d = 0;
		int m = na / 2 + 1;
		while (d < m)
		{
			int n;
			if (i < nums1Size && j < nums2Size)
			{
				________________________;
			}
			else if (i < nums1Size)
			{
				n = nums1[i++];
			}
			else if (j < nums2Size)
			{
				n = nums2[j++];
			}
			ns[d++] = n;
		}
		if (na % 2)
		{
			return ns[d - 1];
		}
		return (ns[d - 1] + ns[d - 2]) / 2.0;
	}
};
```

## template

```cpp
class Solution
{
public:
	double findMedianSortedArrays(vector<int> &nums1, vector<int> &nums2)
	{
		int nums1Size = nums1.size();
		int nums2Size = nums2.size();
		int na = nums1Size + nums2Size;
		int *ns = (int *)malloc(4 * na);
		int i = 0, j = 0, d = 0;
		int m = na / 2 + 1;
		while (d < m)
		{
			int n;
			if (i < nums1Size && j < nums2Size)
			{
				n = (nums1[i] < nums2[j]) ? nums1[i++] : nums2[j++];
			}
			else if (i < nums1Size)
			{
				n = nums1[i++];
			}
			else if (j < nums2Size)
			{
				n = nums2[j++];
			}
			ns[d++] = n;
		}
		if (na % 2)
		{
			return ns[d - 1];
		}
		return (ns[d - 1] + ns[d - 2]) / 2.0;
	}
};
```

## 答案

```cpp
n = (nums1[i] < nums2[j]) ? nums1[i++] : nums2[j++];
```

## 选项

### A

```cpp
n = (nums1[i] < nums2[j]) ? nums1[j++] : nums2[i++];
```

### B

```cpp
n = (nums1[i] > nums2[j]) ? nums1[i++] : nums2[j++];
```

### C

```cpp
n = (nums1[i] >= nums2[j]) ? nums1[i++] : nums2[j++];
```