求两个中位数

问题:设X[0:n-1]和Y[0:n-1]为两个数组,每个数组中含有n个已排好序的数。试设计一个O(logn)时间算法,找出X和Y的2n个数的中位数并输出。

问题分析:本来可以很简单的排序(O(n))输出中间两个数的,但是题目要求复杂度要O(logn),就有点麻烦了。主要就是对两个数组不断进行删除裁剪(这里说的删除裁剪并不是真的对数组元素进行删除,只是进行范围的缩小),直到X数组和Y数组只剩下两个元素,然后对这四个元素进行比较选出中位数。

具体方法:new两个数组X[]和Y[],然后用两个for循环进行初始化,接着用while循环进行缩小范围的操作,直到X和Y数组都只剩下两个元素。

while循环的内部操作:1判断X数组和Y数组是否只有两个元素,如果是的话,比较X[xleft]和Y[yleft]的大小,取大者为第一个中位数;然后比较X[xright]和Y[yright]的大小,取小的作为第二个中位数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值