思路:
AC代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
while(left<=right)
{
int mid=(left+right)/2;
if(target==nums[mid])
return mid;
//分情况,分两个范围
else if(nums[mid]<nums[right]) //说明这一部分是有序的
{
//如果中间值小于target 那么left就要前进 改变mid的位置
if(target>nums[mid]&&nums[right]>=target)
left=mid+1;
else //不小于的话,那么right就后退
right=mid-1;
}
else//这一部分是无序的
{
if(nums[left]<=target&&target<nums[mid])
right=mid-1;
else
left=mid+1;
}
}
return -1;
}
};
如有错误,多多指教!