要在旋转数组中找到给定的值,就需要分情况讨论了,
重点是找到分割后的两部分哪部分是有序的,根据有序的部分可以找到向哪继续下一步的查找
第一种情况,0到mid没旋转则有序,则若目标值在mid和lo之间, 则hi=mid,若不是,则lo=mid
第二种情况,0到mid旋转了则mid到hi有序,要找的值在mid到hi之间,则lo=mid,若不是,则mid=hi
注:因为>>的优先级很低,所以一定记得加括号。
class Solution {
public int search(int[] nums, int target) {
if(nums==null || nums.length==0)return -1;
int lo=0;
int hi=nums.length-1;
while(lo<=hi){
int mid=lo+((hi-lo)>>1);
if(nums[mid]==target){
return mid;
}
if(nums[mid]>=nums[lo]){
if(nums[mid]>target && nums[lo]<=target){
hi=mid-1;
}else{
lo=mid+1;
}
}else{
if(nums[mid]<target && nums[hi]>=target){
lo=mid+1;
}else{
hi=mid-1;
}
}
}
return -1;
}
}