两个排序数组取中位数

95 阅读1分钟

两个排序数组取中位数 解法:

  1. 归并合并两个数组,再取中位数,空间O(n + m),时间O(n + m)
  2. 维护两个指针遍历两个数组,空降O(1), 时间O(n + m)
  3. 二分法查找,空间O(1), 时间O(log(n + m))

取第K小具体步骤:

  1. 取每个数组前进(k/2 - 1)项,若有数组越界,则取最后一项。
  2. 对比该项大小,排除包括较小一项在内的前面所有项,更新索引至该项后面一项,并更新k为k减去实际前进的项数
  3. 若有一个数组已查找至最后,则返回另一个数组当前索引项加上k - 1项
  4. 若k等于1,则比较当前两个数组索引项,返回较小的一项。

若两个数组项数和为基数, 直接取k = (n + m) / 2 + 1即可,若为偶数,则取k = (n + m) / 2 和k = (n + m) / 2 - 1两项取平均值