题目描述
方法一:先合并
思路:
- 合并两个有序数组;
- 排序;
- 找中位数;
- but 这样的话原本的数组有不有序又有什么关系呢。。。
- 时间复杂度O(m+n)
1 | class Solution: |
方法二:二分查找
不太懂,还是迷迷糊糊的,谁来救救我呀啊啊啊
思路:
这里得提到中位数的性质,在有序的有限数集中,在中位数左边的数的个数与右边的相等。也就是说这个问题可以进一步转化为在nums1数组抽前i个数在nums2数组中抽前j个数,且
i+j==halflen,(halflen=(m+n+1)/2)(在奇数情况下左边的数比右边多一个)。所以我们只要二分查找i,通过等式得到
j=halflen−i,然后判断是否能满足中位数的条件。
为了方便起见,同时减少运算次数,我们把数组size小的放到nums1,大的放到nums2,然后从nums1中查找i。
进一步缩小查找范围?对于任意取的值i,我们能得到下面这张图中的关系。绿色的代表左边的数字,黄色的代表的是右边的数字。
1 | class Solution: |
