leetcode 题解 || Search in Rotated Sorted Array 有关问题
leetcode 题解 || Search in Rotated Sorted Array 问题
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; } };