面试题之2个有序数组求合并后的中位数

这篇博客探讨了如何在O(log(n))的时间复杂度下,通过二分查找策略解决合并两个有序数组后的中位数问题。通过递归算法,分别处理数组长度相等和不等的情况,确保了在不同场景下的效率。文中提供了详细的代码实现,并附带了测试案例以验证正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题出处: http://fayaa.com/tiku/view/114/

 

2个有序数组求合并后的中位数

 

第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数。 第二步:假设两个有序数组长度不等,一样的求出中位数

 


解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么我就把数组1和数组2直接合并,然后再直接找到中间元素。对于这样的方案,第一题和第一题就没有什么区别了。这样的话时间复杂度就是O(n)。通常在这样的情况下,那些mentor类型的达人就会循循善诱道:“你还有更好的办法吗:)” 如果比线性更高效,直接能想到的就是对数了O(log(n)),这个时间复杂度在这里可能吗? 当然还是可能的。来继续看看下面的分析。

先找来了一个图(自己画的,简陋了点)

sample

我们先来分析看看: 想到对数的效率,首先想到的就是二分查找,对于这个题目二分查找的意

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值