题目
4. Median of Two Sorted Arrays
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)).
求两个有序数组合并后的中位数。
例子
1 | nums1 = [1, 3] |
1 | nums1 = [1, 2] |
思路
首先需要一个前提条件,那就是两个有序数组,他们的中位数位置都很容易知道,当合并时,如果第二个数组中位数比第一个数组大,那么合并后的中位数一定不在第一个数组中位数的左边。把数字对应到天平上,每个数字重量一样的话,中位数就是保持平衡的支撑点,另一个数组合并进去因为第一个数组中位数在第二个数组中位数左边,所以到第一个数组中位数右边的数要多于左边的数,如果支撑点不移动右侧肯定比左侧沉,自然支撑点要右移。
有了这个前提,就不需要合并之后对所有的数进行排序了,只要计算出最后这个重心向右偏移了多少步,就可以算出合并后的中位数了。如果偏移了两位,那就从这两个数组里面往大的方向数两位。这里需要求出第一个数组中位数在第二个数组中的位置,使用二分法就可以做到题目中要求的O(log (m+n))
的复杂度了。
代码
Python
1 | class Solution(object): |