题目:一个数组是由一个递增数列右移若干位形成的,比如{4,5,1,2,3}是由{1,2,3,4,5}左移两位形成的,在这种数组中查找某一个数。
这道题其实是前面介绍的一道题目:面试题8:旋转数组的最小数字 的一个变种。
解题思路如下:
- 首先通过“面试题8:旋转数组的最小数字”这道题目中获取元素分裂点,时间复杂度为O(log(n))
- 因为旋转数组是由递增数组右移得到,因此旋转数组中的第一个元素是整个数组的中间元素,比较待查找元素与第一个元素,如果待查找元素大于等于第一个元素,表明待查找元素在前半段有序数组中;如果不是这待查找元素在后半段数组中。
- 判断待查找元素所在的有序数组以后,我们通过一个简单的二分查找就可以找出元素所在位置,时间复杂度也是O(log(n))
- 总是时间复杂度为2个O(log(n)),所以时间复杂度还是O(log(n))。
代码实例
View Code
程序输出结果:
分裂点坐标:2
查找数在数组中的位置:4
请按任意键继续. . .
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/05/07/2488192.html,如需转载请自行联系原作者