热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

两个长度相同有序序列的中位数

我当时想的第一个简略算法:把两个序列合并后打印第n个元素,不出所料超时了第二个思路,存储两个序列,然后轮流从两个序列里查找当前最小元素,找到第n个最小元素打印即可,这是个有序序列所

我当时想的第一个简略算法:把两个序列合并后打印第n个元素,不出所料超时了

第二个思路,存储两个序列,然后轮流从两个序列里查找当前最小元素,找到第n个最小元素打印即可,这是个有序序列所以很好找

 

然后就是书上的二分法思路:

分别取l1,l2的中位数a,b,则并集序列的中位数在a,b之间。

这是显然的,假设a

此时去掉l1左边的k个数,再去掉l2右边的k个数,中位数的位置不变,这玩意也好理解,在合并序列的两侧分别去除相同数目的元素,中位数位置不变

然后两个序列就这样不断二分求中位数,直到两个中位数相同,此即并集中位数,或两个取到边界,则较小的是中位数

 

当两个序列长度不相同时,我脑子不好用没想出来,在这里找到了能看懂的办法,而且用在长度相同序列好像还更简单

https://zhuanlan.zhihu.com/p/79687649

 



推荐阅读
author-avatar
宛如画中人需_308
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有