首先使用二分法找到旋转的位置,也就是nums[s]>nums[s+1]的下标,比如nums = [4,5,6,7,0,1,2]
, target = 0
找到7的位置,下标记为c
之后比较target与数组最后一个元素大小,如果target大于最后一个元素,则target应该在下标c之前,否则在c之后
void sortA(std::vector<int>&nums,int s,int t,int &n){
if(s==t){
if(s!=nums.size()-1&&nums[s]>nums[s+1])
{
n=s;
return;
}
}else
{
int m=(s+t)/2;
sortA(nums,s,m,n);
sortA(nums,m+1,t,n);
}
}
int searchA(std::vector<int> nums,int s,int t,int target){
if(s==t){
if(target==nums[s])
return s;
else
return -1;
}
int m=(s+t)/2;
return std::max(searchA(nums,s,m,target),searchA(nums,m+1,t,target));
}
int search(std::vector<int>& nums, int target) {
if(nums.size()==0)
return -1;
int c=0;
sortA(nums,0,nums.size()-1,c);
if(target>nums[nums.size()-1])
return searchA(nums,0,c,target);
else
return searchA(nums,c,nums.size()-1,target);
}