Suppose a sorted array is rotated at some pivot unknown to youbeforehand.
(i.e., 01 2 4 5 6 7
mightbecome 45 6 7 0 1 2
).
You are given a target value to search. If found in the arrayreturn its index, otherwise return -1.
You may assume no duplicate exists in the array.
public class Solution {
public int search(int[]A, int target) {
// IMPORTANT: Please reset any member data youdeclared, as
// the same Solution instance will be reused foreach test case.
int low = 0;
int high = A.length-1;
int m;
while (low <= high) {
m = low +(high-low)/2;
if (A[m]== target) {
return m;
}
// pivotis in the left
if (A[m]< A[high]) {
if (target > A[m]&& target <= A[high]) {
low = m+1;
} else {
high = m-1;
}
} else {// pivot is in the right, A[m] > A[high]
if (target < A[m]&& target >= A[low]) {
high = m-1;
} else {
low = m+1;
}
}
}
return -1;
}
}