询问一道面试算法
有一个数组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.
面试 算法
[解决办法]
很简单啊,就是普通的2分
取中点,和头比较,头>中点则在前半段,否则在后半段
[解决办法]
不好意思,为防止误解,说明一下
2楼找到的是下降点,找到下降点后再来一次2分就找到x了
[解决办法]
。。。就是二分法查找。。。。。我博客里有代码的。。。