寻找两个正序数组的中位数
一、题目描述 (注意:不去重!!!)
给定两个大小为 m 和 n 的正序(从小到大)数组 和 。
请你找出这两个正序数组的中位数,并且要求算法的时间复杂度为 。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
示例 2:
二、解题思路 & 代码
题目的要求 。看到 ,很明显,我们只有用到二分的方法才能达到。
把问题转化为 在两个数组中找第 个大的数,求中位数就是求 第 小数的一种特殊情况(比如,两个数组总长度为 14,那么 )
假设我们要找第 小数,我们可以每次循环排除掉
:
:
如果 ,那么都不可能是第
数组中比 小的数有 个, 数组中, ,假设 前边的数字都比 小,也只有 个,所以比 小的数字最多有 个,所以 最多是第 小的数。而比 小的数更不可能是第
复杂度分析:
- 时间复杂度:。每进行一次循环,我们就减少 k/2 个元素,所以时间复杂度是 O(log(k),而 k=(m+n)/2,所以最终的复杂也就是 。
- 空间复杂度:
另外附上 LeetCode 官方题解:
参考:
==============================================================================================================================
两个有序数组找第k大
解题思路 & 代码
其实就是上一个问题的子问题