目录
找到两个已排序数列的中位数
给出两个已排序的数列 $nums1$ 和 $nums2$ ,两个数列长度分别为 $m$ 和 $n$ ,返回这两个数列的中位数。总体的时间复杂度应该是 $O(log(m+n))$ 。
例 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。
约束条件:
$$\begin{aligned}
nums1.length == m&\\
nums2.length == n&\\
0 <= m <= 1000&\\
0 <= n <= 1000&\\
1 <= m + n <= 2000&\\
-10^6 <= nums1[i], nums2[i] <= 10^6&
\end{aligned}$$
一开始,写的代码比较直观,使用递归方法,一直移动边界,直到可以直接计算中位数
|
|
C
后来把递归改为迭代,移动边界,直到满足计算条件
|
|
C
提交截图(提交时,非现在状态)
上面的算法效率并不高,实际上分析下,其时间复杂度其实是 $O(m+n)$ 。题解要求的复杂度是 $O(log(m+n))$,也即要求不能逐个寻找,应该有某种类似于快速梯度下降的法子,这里实际上二分搜索应该可以考虑下。
二分搜索的递归解法如下:
|
|
C