problem:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,0 1 2 4 5 6 7might become4 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.
Hide Tags
ArrayBinary 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);elsereturn 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;}elseleft = midle + 1;}else{if(A[midle] < target && target <= A[right])left = midle + 1;elseright = midle – 1;}}return -1;}};
不义而富且贵,于我如浮云。