推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

求两个有序数组的中位数:O(log(min(m n)))解法.docx

更新时间:2026-10-16 12:37:40 大小:38K 上传用户:江岚查看TA发布的资源 标签:有序数组中位数二分查找时间复杂度O(log(min(m 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

求两个有序数组的中位数:O(log(min(m,n)))解法

一、问题定义

给定两个有序数组 nums1 和 nums2,求合并后数组的中位数。要求时间复杂度为 O(log(m+n))。

nums1 = [1, 3]
nums2 = [2]
中位数 = 2

nums1 = [1, 2]
nums2 = [3, 4]
中位数 = (2 + 3) / 2 = 2.5

二、为什么需要二分

暴力解法是合并两个数组后找中位数,时间复杂度 O(m+n)。但这个问题的最佳解法利用了"中位数将数组分成左右两部分,且左右两部分元素数量相等"的性质,通过二分搜索找到正确的分割点。

三、核心思路

将两个数组合并后,中位数将其分为左右两部分。我们可以在较短的数组上二分,通过数学关系确定较长数组的分割位置。

3.1 关键观察

假设两个数组合并后的总长度为 total = m + n。中位数的位置是 leftCount = (total + 1) / 2(左侧元素数量)。

如果在 nums1 中取前 i 个元素作为左半部分的一部分,那么 nums2 的左半部分需要取 j = leftCount - i 个元素。

分割条件:左半部分的最大值 <= 右半部分的最小值。


部分文件列表

文件名 大小
求两个有序数组的中位数:O(log(min(m,n)))解法.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载