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:
Example 2:
解法1: Math
参考这篇解释
C++
Java
解法2: Kth Value
这个解法比较好理解一点,也不容易错,要考虑的edge case容易一些。
基本的思想就是先要写出一个find kth element in a two sorted array的function。
这个function可以用递归的方式实现,而每一次递归,两个array都需要去掉当中一个的一半。
想法就是:
如果第一个array的长度是0,那么第k个一定在第二个array的k-1位置。
如果k==1,那么第k个就是当前比较的array的第一个的最小值
如果都不是,那么可以把两个array都砍两半。假设是A和B。
比较A和B的中点,一个是pa = k/2,另一个就是k - pa, 为的是保证左右两半都是k个数。
然后比较这两个数,如果mA < mB,则说明前pa个数都不是第k个数的备选,可以抛掉。相反同理
如果ma == mB,则说明已经找到第k个数,返回即可。
等kth function写出来之后,就可以按照总长度是奇数还是偶数。
如果是奇数,就直接求total / 2的数,
如果是偶徐,需要把中间两个数的平均数返回。
总的时间复杂度是O(logM + logN) = O(logMN)
|
|