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.
循环数组查找,二分查找,几种情况分类讨论
public class SearchinRotatedSortedArray {
public int search(int[] A, int target) {
int res=-1;
int low=0;
int high=A.length-1;
while(low<=high){
int med = low+((high-low)>>1);
if(A[med]==target)
return med;
else if(A[med]>target){
if(A[high]>=A[med]){
high=med-1;
}else if(A[low]<=target){
high=med-1;
}else {
low=med+1;
}
}else {
if(A[low]<=A[med]){
low=med+1;
}else if(A[low]<=target){
high=med-1;
}else {
low=med+1;
}
}
}
return res;
}
public static void main(String[] args) {
int[] A = {1,3};
int target= 3;
System.out.println(new SearchinRotatedSortedArray().search(A, target));
}
}