趣题:在双向有序链表中查找指定的数
来源:互联网 发布:如何解封淘宝账号 编辑:程序博客网 时间:2024/04/28 02:21
大家都知道,在一个有序数组里查找指定的数可以做到O(logn)的复杂度。但是大家想过没,在一个有序链表中又怎么样呢?让我们假设有这样一个链表,每个元素都严格小于它的后继元素。每个元素都能访问到自己的前驱元素和后继元素(如果有的话)。另外,我们知道每个元素在内存中的地址,因此可以进行随机存取。或者可以说,这个有序链表中的所有元素都是储存在一个数组中的,但数组本身并不有序。
现在,我们需要在这个链表中寻找一个指定的数x。你能否设计出一个平均复杂度低于O(n)的算法来?
下面是一个平均复杂度为O(√n)的算法。在数组中随机选取Θ(√n)个数,然后通过不断地比较更新,找出这些数当中比x小的最大的数(不妨记作p),以及比x大的最小的数(记作q)。从p所在的位置出发,沿着链表往下走,直到找到x或者走到q(表明x不在链表中)为止。
可以证明,O(√n)已经是最优的了。
- 趣题:在双向有序链表中查找指定的数
- 面试100题:14.求在有序数组中查找两个数的和为指定数
- 面试100题:14.求在有序数组中查找两个数的和为指定数
- 在一个旋转有序数组中,查找最小的数
- [微软面试100题] 二元查找数变成有序的双向链表
- Java-在一组有序数组中进行查找指定数及对应下标,再插入指定数,最后删除指定数。
- 在有序表中进行二分查找,并返回所查找的数在有序表中的位置
- 二叉查找树转变成有序的双向链表
- 二元查找树转有序的双向链表
- 将二叉查找树变为有序的双向链表
- 二叉查找树变为有序的双向链表
- 有序数折半查找
- 03+在一个有序的二维数组中查找一个数
- 算法9:在一个循环有序的数组里查找一个数
- 找出有序数组中和等于指定数的两个数
- 二分查找(有序数组中查找需要的数)
- 二分法在有序数组中查找一个数
- 二分法的查找有序数中的一个数
- 预告:几个有趣的编程比赛
- 刷屏新工具:史上最壮观的生命游戏构造图
- 密码学协议举例(二):秘密共享的门限方案
- 一个简单而有用的数据结构
- (水)这种事情也能被我撞见
- 趣题:在双向有序链表中查找指定的数
- 这个图形有什么牛B的地方?
- 密码学协议举例(一):带有防欺骗的承诺
- Mandelbrot the Fractal Bear 可爱的分形熊熊
- 趣题:理想模型下的排序算法(上)
- 一个难看的证明和一个漂亮的证明
- 根号2是无理数的又一个精彩证明
- 身份验证、中间人攻击和数字签名:浅谈密码学(下)
- 酷图分享:The Eye of i