给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。
示例
示例 1: |
示例 2: |
解法
核心方法
分别在num1和num2切割,找到满足Lmax1<Rmin2且Lmax2<Rmin的位置。
奇偶问题
两个数组合并后的长度,有可能是偶数,也有可能是奇数。如果可以让数组长度总是为偶数,那么就可以用公式覆盖。
通过虚拟加入"#"
,让每个数组的长度都变成 2x + 1,所以 n+m -> 2n + 2m + 2
,恒为偶数。
转换后,原始的元素可以通过新下标//2得到。
比如9,原来是3位,现在是7位, 7//2=3
而对于割,如果‘#’
上等于割在2个元素之间,割在数字上等于把数字划到2个部分,总是有以下成立:
LMaxi = (Ci-1)/2 位置上的元素 |
代码
class Solution: |