There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
Example 1:
nums1 = [1, 3]
nums2 = [2]
The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]
The median is (2 + 3)/2 = 2.5
如果不考虑题目要求的时间复杂度的话,我们可以先将两个数组合并为一个数组,然后找到中间数即可。
要解决该问题,我们首先要理解中位数有什么用。在统计学中,中位数用于将一个数据集分割成两个长度相等的子集,其中一个子集总是大于另一个。
如果我们理解了中位数是用于分割,我们就接近答案了。
首先,我们在A中随机位置i将A分割为两个部分。
left_A | right_A
A[0], A[1], ..., A[i-1] | A[i], A[i+1], ..., A[m-1]
因为A有m个元素,所以这里就有 m+1 中分割方式(i = 0 ~ m)
同样的我们可以将B也使用一个随机位置j分割为两个部分。将 leftA和leftB 放到一个集合,rightA和rightB放入另一个集合,我们把他们称为 left_part 和 right_part.
left_part | right_part
A[0], A[1], ..., A[i-1] | A[i], A[i+1], ..., A[m-1]
B[0], B[1], ..., B[j-1] | B[j], B[j+1], ..., B[n-1]
如果我们能保证
然后,我们将所有在{A, B}中的元素分割为长度相等的两个部分,而且其中一部分总是大于另一部分。则有
要满足这两个条件,我们只需要保证
i+j=m−i+n−j (or: m - i + n - j + 1m−i+n−j+1) if , we just need to set:
本站采用 知识共享署名-非商业性使用-相同方式共享3.0 中国大陆许可协议 进行许可,转载请注明出处。
推荐使用 chrome 浏览器浏览本站。