两个有序数组找第k小的数

事件复杂度O(log(k) )

在网上看的,和同学商讨过,可行,认为此方法比上个log(m)+log(n)的方法要好

第一个数组m个元素

第二个数组n个元素

分别从两个数组找第k/2个数,a[k/2],b[k/2];

假设a[k/2]<b[k/2]; 则a[k/2] 之前的以及a[k/2]都可以删去,并且k=k -- 删去的元素

下面分析为什么可以删去:

因为a[k/2]<b[k/2],所以a[k/2]前至少有k/2-1个元素,至多有k/2-1 + k/2-1 =k-2 个元素,因为a[k/2]  and  b[k/2] 之后的都不可能在a[k/2] 之前,所以a[k/2]排在最后时也排在第k-1个位置,都小于第k个元素,所以可删去。

其他情况同理;

当m或n小于k/2时,假设m<k/2 令第一个数组中的最后一个元素代替上面的a[k/2], 道理同上面一样。

这样每次k都减半,直到k等于1时,从比较两个数组头 中

比较小的就是所求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值