两个排序数组取中位数 解法:
- 归并合并两个数组,再取中位数,空间O(n + m),时间O(n + m)
- 维护两个指针遍历两个数组,空降O(1), 时间O(n + m)
- 二分法查找,空间O(1), 时间O(log(n + m))
取第K小具体步骤:
- 取每个数组前进(k/2 - 1)项,若有数组越界,则取最后一项。
- 对比该项大小,排除包括较小一项在内的前面所有项,更新索引至该项后面一项,并更新k为k减去实际前进的项数
- 若有一个数组已查找至最后,则返回另一个数组当前索引项加上k - 1项
- 若k等于1,则比较当前两个数组索引项,返回较小的一项。
若两个数组项数和为基数, 直接取k = (n + m) / 2 + 1即可,若为偶数,则取k = (n + m) / 2 和k = (n + m) / 2 - 1两项取平均值