Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
// https://leetcode.com/problems/search-in-rotated-sorted-array/
// Author : Chao Zeng
// Date : 2015-3-31
class Solution {
public:
int search(int A[], int n, int target) {
int left = 0, right = n - 1;
while (left <= right){
int mid = (left + right)/2;
if (A[mid] == target)
return mid;
if (A[right] > A[left]){//判断已排序数组是升序还是降序
if (target < A[mid])
right = mid - 1;
else if (target > A[mid])
left = mid + 1;
else
return mid;
}
else{
if (A[left] < A[mid])
{
if (target <= A[mid] && target >= A[left])//注意=号
right = mid - 1;
else
left = mid + 1;
}
else if (A[left] > A[mid])
{
if (target >= A[left] || target <= A[mid])
right = mid - 1;
else
left = mid + 1;
}
else{
if (A[left] == target)
return left;
else
left++;
}
}
}
return -1;
}
};