题目描述
给出一个转动过的有序数组,你事先不知道该数组转动了多少
(例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2).
在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1。
假设数组中不存在重复项。
示例1
输入
复制
[1],0
返回值
复制
-1
示例2
class Solution {
public:
/**
*
* @param A int整型一维数组
* @param n int A数组长度
* @param target int整型
* @return int整型
*/
int search(int* A, int n, int target) {
// write code here
int l=0,r = n-1,mid = 0;
while (l<=r ) {
mid = l+(r-l)/2;
if (A[mid] == target) return mid;
else if (A[mid]>=A[l]) {
//mid >=l, 左侧一定有序
if(A[l]<=target && A[mid]>target) r = mid-1;
else l = mid+1;
}else{
//右侧一定有序
if (A[r]>=target && A[mid]<target) l = mid+1;
else r = mid-1;
}
}
if(A[mid ]== target) return mid;
return -1;
}
};