面试题:查找旋转数组中的某一元素

题目:一个数组是由一个递增数列右移若干位形成的,比如{4,5,1,2,3}是由{1,2,3,4,5}左移两位形成的,在这种数组中查找某一个数。

这道题其实是前面介绍的一道题目:面试题8:旋转数组的最小数字 的一个变种。

解题思路如下:

  1. 首先通过“面试题8:旋转数组的最小数字”这道题目中获取元素分裂点,时间复杂度为O(log(n))
  2. 因为旋转数组是由递增数组右移得到,因此旋转数组中的第一个元素是整个数组的中间元素,比较待查找元素与第一个元素,如果待查找元素大于等于第一个元素,表明待查找元素在前半段有序数组中;如果不是这待查找元素在后半段数组中。
  3. 判断待查找元素所在的有序数组以后,我们通过一个简单的二分查找就可以找出元素所在位置,时间复杂度也是O(log(n))
  4. 总是时间复杂度为2个O(log(n)),所以时间复杂度还是O(log(n))。

代码实例

View Code

程序输出结果:

分裂点坐标:2
查找数在数组中的位置:4
请按任意键继续. . .

 

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/05/07/2488192.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值