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.
有序数列+查找方法~~~~~~二分查找
边界问题比较麻烦,因此提交错误了几次。
PS:总结,只要是有序数列的查找——二分查找没错
class Solution {
public:
int search(int A[], int n, int target) {
return my_binary_search(A,0,n-1,target);
}
private:
int my_binary_search(int A[],int left,int right,int target);
};
int Solution::my_binary_search(int A[],int left,int right,int target){
while (left<=right)
{
int mid=(left+right)/2;
if (A[mid]==target)
{
return mid;
}
if (A[left]<=A[mid])
{
if (A[left]<=target&&target<A[mid])
right=mid-1;
else
left=mid+1;
}
else
{
if (A[mid]<target&&target<=A[right])
left=mid+1;
else
right=mid-1;
}
}
return -1;
}