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; } }