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.
Solution: use binary search.
find the mid first, if A[mid] == target, return mid;
if A[mid] >= A[left], then the left part is sorted. then if target in left part, right = mid - 1; or left = mid + 1;
if A[mid] < A[left], then the right part is sorted, then if target in right part, left = mid + 1; or right = mid -1.
Running Time: O(lg(n));
public class Solution {
public int search(int[] A, int target) {
// Note: The Solution object is instantiated only once and is reused by each test case.
int len = A.length;
int left = 0;
int right = len - 1;
//must be <= here.
while(left<=right){
int mid = (left+right)/2;
if(target == A[mid]){
return mid;
}
//must be >= here;
if(A[mid]>=A[left]){
if(A[left]<=target && A[mid]>target){
right = mid - 1;
}else{
left = mid + 1;
}
}else{
if(A[mid]<target && target<=A[right]){
left = mid + 1;
}else{
right = mid -1;
}
}
}
return -1;
}
}