problem:
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.
Array Binary Search
在把一个排好序的序列旋转一次,再搜索一个给定值,考的是二分搜索的变种
thiking:
(1)利用二分 搜索:经典二分搜索算法如下
int bsearch(int a[], int left, int right, int key)
{
if (left > right)
return -1;
int mid = left + (right - left) / 2;
if (a[mid] == key)
return mid;
else if (a[mid] < key)
return bsearch(a, mid + 1, right, key);
else
return bsearch(a, left, mid - 1, key);
}
(2)这里把原序列进行了旋转,在判断下一个搜索区间时要稍加考量
code:
class Solution {
public:
int search(int A[], int n, int target)
{
if(0 == n) return -1;
int left = 0;
int right = n - 1;
while(left <= right)
{
int midle = (left + right) >> 1;
if(A[midle] == target) return midle;
if(A[left] <= A[midle])
{
if(A[left] <= target && target < A[midle])
{
right = midle - 1;
}
else
left = midle + 1;
}
else{
if(A[midle] < target && target <= A[right])
left = midle + 1;
else
right = midle - 1;
}
}
return -1;
}
};