原题来自牛客网:链接
题目描述
给出一个转动过的有序数组,你事先不知道该数组转动了多少
(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).
在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。
假设数组中不存在重复项。
思路
有序数组中查找一般使用二分查找,但是这道题进行了转动。
以下思路来自牛客网用户“搁浅的鱼儿”:
重点在于左右边界的确定,将整个旋转数组分为两部分一定有一部分有序,那么通过判断左边还是右边有序分为两种情况,然后再判断向左走还是向右走。
class Solution {
public:
int search(int* A