4. 寻找两个正序数组的中位数
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:
**输入:**nums1 = [1,3], nums2 = [2]
**输出:**2.00000
**解释:**合并数组 = [1,2,3] ,中位数 2
示例 2:
**输入:**nums1 = [1,2], nums2 = [3,4]
**输出:**2.50000
**解释:**合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
提示:
nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-10(6) <= nums1[i], nums2[i] <= 10(6)
中位数本质上是把这两个数组分成了两部分
左部分数<右部分数,且数量最多相差1
所以我们可以寻找一个i来划分nums1,根据m和n从而得到j来划分nums2
划分过后有nums1LR <= nums2RL且nums1RL >= nums2LR
当同时满足时就是正确划分
再寻找i的过程中,如果先满足了nums1LR <= nums2RL则此i可能正确也可能左边划分少了,此时我们更新l = i+1
如果连nums1LR <= nums2RL都没满足说明左边划分多了,更新r=i-1
同时注意只有在划分可能正确的情况下才更新ans
1 | class Solution { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.




