【百度面试题】循环有序数组的查找问题
来源:互联网 发布:php cms 编辑:程序博客网 时间:2024/04/29 22:49
问题:
有一个循环有序数组A,如{7,8,9,0,1,2,3,4,5,6},不知道其最小值的位置。
那么如何从这样的数组中寻找一个特定的元素呢?
解决:
当然,遍历总是一个办法。当然面试的时候回答遍历估计就直接杯具了。
我的想法是将原数组分段,用首元素s,中间元素m和尾元素e,可以将数组分为两个子数组s1,s2,
那么,必然有至少一个子数组是有序的。那么如何确定那一段是有序的呢?
通过分析可以看到只有3种情况:
●当s就是A中最小的元素时,以下不等式成立:
s <= m <= e
●当最小值位于(s, m]时,则有:
m <= e <= s
●当最小值出现在(m,e]时,则有:
e <= s <= m
所以通过s,m,e的大小关系,可以很轻松的判断出s1和s2哪个是有序的。
通过比较要查找的目标t 与s,m,e的大小关系,可以知道t位于哪个子数组。
若t位于有序的子数组,则用二分查找就可以了。
否则,对无序的子数组重复刚才的过程就可以了。
具体代码如下:
- 【百度面试题】循环有序数组的查找问题
- 【百度面试题】循环有序数组的查找问题
- 【百度面试题】循环有序数组的查找问题
- 百度面试题--循环有序数组
- 面试题 -- 有序二维数组的查找
- 循环有序数组查找问题
- 循环有序数组的查找
- 循环有序数组查找
- 2014-04-04 循环递增数组查找元素(二分变形思想,百度面试题)
- 有序 循环数组的二分查找
- 循环有序数组的查找笔记
- 查找循环有序数组的元素
- 面试题实现--(百度的不存在数查找问题)
- 楚楚街—面试题 --有序数组查找
- 面试题3:针对部分有序的二维数组的查找
- 《剑指Offer》面试题3:二维数组中的查找(行列分别有序数组的二分查找)
- 面试题:求2个有序数组的有序交集
- 面试题:求2个有序数组的有序交集
- 香山遇林丹
- 原创 - JSP自定义标签库制作
- 浅议数组不等于指针
- 英雄和制度的关系—公司老板是不是张无忌?
- Struts2+Spring+Hibernate整合开发
- 【百度面试题】循环有序数组的查找问题
- SSO解决方案大全(转载)
- uva 10041 Vito's family
- 狗曰的上海
- 卓越网删除标错价硬盘订单:向网友发道歉信!卓越高层全是一群XXX
- 淘宝
- 求助!
- 图片抽奖系统
- 复制文本