int search(vector<int>& nums, int target)
while(front<behind)//找到旋转节点的索引,最后存储在med中
if(nums[med]<nums[med-1]&&nums[med]<nums[med+1])//满足条件,med就是我们要的旋转节点
break;
if(nums[med]>nums[front]||nums[med]>nums[behind])//如果med对应的数值大于front对应的数值
{ //或者med对应的数值大于behind对应的数值
front=med+1; //那么说明旋转节点在med前面
med=(front+behind)/2;
}
else
{
behind=med-1;
med=(front+behind)/2;
}
}
front=0,behind=s1-1;//找到旋转节点的索引之后,我们分两段,看一下target在哪一段
if(nums[front]<=target&&target<=nums[med-1])//用典型的二分法找到target的索引
return -1;//如果找不到,那么返回-1
}
else if(nums[med]<=target&&target<=nums[behind])//用典型的二分法找到target的索引
return -1;//如果找不到,那么返回-1
}
return -1;//target没有在旋转节点两边的任何一段之中,那么返回-1
}