题目:
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.
思路:
Binary Search,取中间值进行判断,左右两边必有一边是连续的。搜索时连续的一边使用BS,另一边继续判断。注意等号出现的位置。
Code:
public int search(int[] A, int target) {
if(A.length==0) return -1;
int left=0,right=A.length-1;
int mid;
while(left<=right){
mid=(left+right)/2;
if(A[mid]==target){
return mid;
}else if(A[left]<=A[mid]){
if(A[left]<=target && target<A[mid]){
right=mid-1;
}else{
left=mid+1;
}
}else{
if(A[mid]<target && target<=A[right]){
left=mid+1;
}else{
right=mid-1;
}
}
}
return -1;
}
备注: