</pre><pre code_snippet_id="1772246" snippet_file_name="blog_20160720_2_2733242" name="code" class="java"> public int search(int [] A,int target){
if(A==null||A.length==0)
return -1;
int low = 0;
int high = A.length-1;
while(low <= high){
int mid = (low + high)/2;
if(target < A[mid]){
if(target < A[low] && A[mid] > A[high]){//spinned
low = mid + 1;
}else{
high = mid - 1;//normal case
}
}else if(target > A[mid]){
if(target>A[high] && A[low] > A[mid]){
high = mid - 1;
}else{
low = mid + 1;
}
}else{
return mid;
}
}
return -1;
}
based on http://www.cnblogs.com/springfor/p/3858140.html
81,
public boolean search(int[] A, int target) {
if (A == null || A.length == 0)
return false;
int low = 0;
int high = A.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (target < A[mid]) {
if(A[mid] == A[high]){
high--;
}else if (target < A[low] && A[high] < A[mid]) {
low = mid + 1;
}else {
high = mid - 1;
}
} else if (target > A[mid]) {
if (A[low] == A[mid]){
low++;
}else if (target > A[high] && A[low] > A[mid]){
high = mid - 1;
}else{
low = mid + 1;
}
} else{
return true;
}
}
return false;
}