Leetcode 4 O(log(m+n))复杂度的求两个有序数组的中位数的算法
这题是408上面有的题目。。。
我记得原题是这样的,求两个升序数组的中位数。那么可以用二分的办法来解决这个问题,
首先就是分别找A和B两个数组的中位数,如果A数组和B数组的中位数相等,那么显然这两个各
自的中位数就是两个数组合并之后的大数组的中位数。(显然这里求中位数复杂度为O(1)).
如果中位数A小于中位数B,那么就可以求两个中位数中间部分的中位数,,,,但是似乎前提
是这两个数组的长度是相等的,就要分奇数偶数来判断了,总之就是通过中位数,前面抛弃一半,后面抛弃一半
,在剩下的一半上找中位数。
(然后默默想一下,似乎这和两个数组的长度相等或者不相等没有关系,不相等一样的方法)
但是,现在情况进阶了,现在要求的是在长度分别为n和m的两个有序数组上面求出合并后的整个数组的
第k大。
那么现在怎么用分治的思想来解决这个问题呢?
不要被一半迷惑了,这里还是k/2,来二分。
就是有点绕,前面是求A的中位数和B的中位数,这样就求出了整个数组的中位数。而这里是求A数组的第
k/2个元素和B数组的k/2个元素,这样就求出了整个数组的第k大。要脑子转一下。
剩下的就是编码的细节部分了。整体还是和线段树的query操作有很多的相似之处的。