询问一道面试算法

quickSort 2013-10-24 04:43:13
有一个数组a[n],前面一部分和后面一部分是单独有序的(升序),但是整个数组是无序的,并且数组的最后一个元素小于第一个元素。
例如:
21, 29, 30, 40, 1, 3, 9, 11, 12, 16
但是你并不知道出现下降的点在哪里。
现在给你一个数x,要求在小于O(n)的复杂度内找到x,如果存在返回下标,不存在返回-1.

注意:n很大(千万级别),及时你的复杂度是O(0.01n),其实仍然是O(n);如果你的复杂度是100O(logn),那么仍然是logn.

...全文
212 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
quickSort 2013-10-24
  • 打赏
  • 举报
回复
唉,当时考虑复杂了。。。。。。。。。。。。。。
名字到底多长 2013-10-24
  • 打赏
  • 举报
回复
。。。就是二分法查找。。。。。我博客里有代码的。。。
rocktyt 2013-10-24
  • 打赏
  • 举报
回复
不好意思,为防止误解,说明一下 2楼找到的是下降点,找到下降点后再来一次2分就找到x了
rocktyt 2013-10-24
  • 打赏
  • 举报
回复
很简单啊,就是普通的2分 取中点,和头比较,头>中点则在前半段,否则在后半段
quickSort 2013-10-24
  • 打赏
  • 举报
回复
如果把前面的升序部分移到后面就可以用二分查找了。。。。。 或者分别用二分查找,但是下降的那个点怎么找呢?

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧