这道题按顺序搜索也可以,而且速度二分查找差不多,甚至更快。
public class Solution {
public int search(int[] nums, int target) {
int start=0;
int end = nums.length-1;
int mid = start+(end-start)/2;
int lo = start;
int hi = end;
if(nums.length==1){if(nums[0]==target)return 0;else return -1;}
//通过二分查找找到最小的点
while(hi>lo){
if(hi-1==lo)break;
mid = lo+(hi-lo)/2;
if(nums[mid]<nums[end]&&nums[mid]<nums[start]){
hi=mid;
}
else{
lo = mid;
}
}
int pos = hi;
if(nums[pos]==target)return pos;
//比如{7,8,9,0,1,2,3,4,5,6}
//目标大于7,则在0和7之间找,否则则在0和六之间找,接下来就是二分查找。
if(target>nums[start]){
end = pos-1;
}else if(target == nums[start]){
return start;
}else if(target<nums[start]){
start = pos;
}
while(end>start){
if(end-1==start){System.out.println("end:"+end+"start"+start); break;}
mid = start+(end-start)/2;
if(target>nums[mid]){
start = mid;
}
else{
end=mid;
}
}
//if(nums[start]==target)return start;
if(nums[end]==target)return end;
else return -1;
}
}