题目:
题解:
int search(int* nums, int numsSize, int target){
int left = 0,right = numsSize - 1,mid =0;
while(left<=right){
mid = left+ ((right - left)>>1);
if(nums[0]<=nums[mid]){//mid在前一段,说明前一段是有序数组
if(nums[0]<=target&&target<nums[mid]){//target在前半段,且target在nums[mid]左边
right = mid -1;
}else{//target在前半段,且target在nums[mid]右边,或者target在无序段
left = mid +1;
}
}else {//mid在后一段,说明后一段是有序数组
if(nums[0]>target&&target>=nums[mid]){//target在后半段,且target在nums[mid]右边
left = mid +1;
}else{//target在后半段,且target在nums[mid]左边,或者target在无序段
right = mid -1;
}
}
}
return target==nums[left-1]?left-1:-1;
}