题意
给出一个转动过的有序数组,你事先不知道该数组转动了多少
0 1 2 4 5 6 7
可能变为4 5 6 7 0 1 2
在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引,否则返回-1
假设数组中不存在重复项
题解
不管数组怎么转,都会有一半以上组成的数组是有序的,所以就有了以下解法
class Solution {
public:
/**
*
* @param A int整型一维数组
* @param n int A数组长度
* @param target int整型
* @return int整型
*/
int search(int* A, int n, int target) {
int left = 0;
int right = n - 1;
while(left <= right){
int mid = left + (right - left)/2;
if(A[mid] == target)
return mid;
else if(A[left] <= A[mid]){
// 左边有序
if(A[mid] > target && A[left] <= target)
right = mid - 1;
else
left = mid + 1;
}
else{
// 右边有序
if(A[mid] < target && A[right] >= target)
left = mid + 1;
else
right = mid -1;
}
}
return -1;
}
};