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

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

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

```java
class Solution {
	public double findMedianSortedArrays(int[] nums1, int[] nums2) {
		int nums1Size = nums1.length;
		int nums2Size = nums2.length;
		int na = nums1Size + nums2Size;
		int[] ns = new int[4 * na];
		int i = 0, j = 0, d = 0;
		int m = na / 2 + 1;
		while (d < m) {
			int n = 0;
			_________________;
			ns[d++] = n;
		}
		if (na % 2 == 1) {
			return ns[d - 1];
		}
		return (ns[d - 1] + ns[d - 2]) / 2.0;
	}
}
```

## template

```java
class Solution {
	public double findMedianSortedArrays(int[] nums1, int[] nums2) {
		int nums1Size = nums1.length;
		int nums2Size = nums2.length;
		int na = nums1Size + nums2Size;
		int[] ns = new int[4 * na];
		int i = 0, j = 0, d = 0;
		int m = na / 2 + 1;
		while (d < m) {
			int n = 0;
			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 == 1) {
			return ns[d - 1];
		}
		return (ns[d - 1] + ns[d - 2]) / 2.0;
	}
}
```

## 答案

```java
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++];
}
```

## 选项

### A

```java
if (i < nums1Size && j < nums2Size) {
	n = (nums1[j] < nums2[i]) ? nums2[i++] : nums1[j++];
} else if (i < nums1Size) {
	n = nums1[j++];
} else if (j < nums2Size) {
	n = nums2[i++];
}
```

### B

```java
if (i < nums1Size && j < nums2Size) {
	n = (nums1[j] > nums2[i]) ? nums2[i++] : nums1[j++];
} else if (i > nums1Size) {
	n = nums1[j++];
} else if (j > nums2Size) {
	n = nums2[i++];
}
```

### C

```java
if (i < nums1Size && j > nums2Size) {
	n = (nums1[j] < nums2[i]) ? nums2[i++] : nums1[j++];
} else if (i < nums1Size) {
	n = nums1[j++];
} else if (j < nums2Size) {
	n = nums2[i++];
}
```