这道题不难,我的想法用二分搜寻。
难点在二分法的写法……这里卡了挺久的。
所幸还是写出来了
代码如下:
class Solution {
public:
int search(vector<int>& nums, int target) {
int result=0;
while(nums.size()>3){
int n=nums.size()/2;
if(nums[n]>nums[0]){
if(target==nums[0]) return result;
if(target==nums[n]) return result+n;
else if(target>nums[0]&&target<nums[n]){
nums.erase(nums.begin()+n+1,nums.end());
}
else{
nums.erase(nums.begin(),nums.begin()+n+1);
result+=n+1;
}
}
else if(nums[n]<nums[0]){
if(target==nums[n+1]) return result+n+1;
if(target==nums[nums.size()-1]) return result+nums.size()-1;
else if(target>nums[n+1]&&target<nums[nums.size()-1]){
nums.erase(nums.begin(),nums.begin()+n+1);
result+=n+1;
}
else{
nums.erase(nums.begin()+n+1,nums.end());
}
}
}
if(nums.size()==3){
if(nums[1]==target) result+=1;
else if(nums[0]==target) result=result;
else if(nums[2]==target) result+=2;
else return -1;
}
else if(nums.size()==2){
if(nums[1]==target) result+=1;
else if(nums[0]==target) result=result;
else return -1;
}
else if(nums.size()==1&&nums[0]!=target) return -1;
else return result;
if(nums.size()==0) return -1;
return result;
}
};