二分法:每次判断mid所在的数段是否有序
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
int mid=(left+right)/2;
while(left<=right)
{
if(nums[mid]==target)
return mid;
else
{
if(nums[left]<nums[right])
{
if(nums[mid]<target)
left=mid+1;
else
right=mid-1;
}
else
{
if(nums[mid]<nums[right]) // the right is ordered
{
if(target>nums[mid]&&target<=nums[right])
left=mid+1;
else
right=mid-1;
}
else
{
if(target>=nums[left]&&target<nums[mid])
right=mid-1;
else
left=mid+1;
}
}
}
mid = (left + right )/2;
}
return -1;
}
};