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

给定两个大小分别为 mn 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数

 

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:
2.00000
解释:
合并数组 = [1,2,3] ,中位数 2

示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:
2.50000
解释:
合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

示例 3:

输入:nums1 = [0,0], nums2 = [0,0]
输出:
0.00000

示例 4:

输入:nums1 = [], nums2 = [1]
输出:
1.00000

示例 5:

输入:nums1 = [2], nums2 = []
输出:
2.00000

 

提示:

 

进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

以下程序实现了这一功能,请你填补空白处内容: ```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++]; } ```