求两个有序数组的中位数

这篇博客探讨如何在o(n)的时间复杂度内,利用中位数和顺序统计的方法,求解两个已排序数组的中位数。首先找到每个数组的中位数,然后根据中位数的相对大小在相应数组的子集中递归搜索。由于数组有序,这种方法有效减少了时间复杂度。代码已在VC++6.0上测试,需要注意整数处理和递归结束条件的设定。
摘要由CSDN通过智能技术生成

求两个有序数组的中位数  

         如果有两个有序的数组,都是已经排好序的。那么求它们的中位数应该怎样求呢。如果采用对这两个数组进行排序的方法,最快的时间复杂度也要o(nlogn)的时间。但是,如果采用中位数和顺序统学的方法来寻找,则可以在o(n)的时间内解决这个问题。

       我们先寻找每个数组的中位数,因为是排好顺序的数组,因此,可以在o(1)时间内找到。然后,比较这两个数字的大小。如果A的中位数大于B的中位数,则在A的前半个数组和B的后半个数组中寻找,反之,在B的前半个数组和A的后半个数组寻找。根据递归方程,解得时间复杂度是o(n)。

       中位数:一组数据中间位置的数,如果是偶数个数,则取中间两个位置数的平均值。

       此题两个数组个数一样,那么两个数组的中位数总个数是2*n也就是偶数,中位数一定是中间两个位置的平均数。时间复杂度要求O(logn),则一定要充分利用数组有序的信息。

       网上看了很多版本,都是对奇偶数的考虑不全。自己试着编写了一下,发现很多细节很容易忽略。测试考虑的是整数&

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值