题目
给定一个有序数组的旋转和一个目标值,返回其目标值在该数组的下标。如果不存在,那么返回-1。假设数组没有重复的值。
算法
二份查找
O(lgN)
import java.util.*;
class Solution{
public int searchRotateArray(int[] A,int target){
int left=0;
int right=A.length-1;
while(left<=right){
int mid=left+(right-left)/2;
if(A[mid] == target) return mid;
// 左半部分有序
if(A[left]<=A[mid]){
if(A[left]<=target && target<A[mid])
right=left-1;
else
left=mid+1;
}
else{
// 右半部分有序
if(A[mid]<target && target<=A[right])
left=mid+1;
else
right=mid-1;
}
}
return -1;
}
}