33. 搜索旋转排序数组
思路:第一个想法是直接sort一下然后在二分查找,开始写的时候才发现这样写不对。第二个想法就是找到那个变化的位置,进行两个二分查找,直到找到那个值。嗯第二个方法超时了,,,第三个思路是第二个思路的改进版,可以把整个看为递增的模式,其实是由两端有序的数组组合在一起的,而且前面的大·,后面的小可以用二分法直接控制寻找。
class Solution {
public:
int search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1,mid;
if(nums.size()==0) return -1;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]==target) return mid;
if(nums[mid]<nums[right]){
if(nums[mid]<target && nums[right]>= target)
left = mid+1;
else right=mid-1;
}else{
if(nums[mid]>target && nums[left]<=target)
right = mid-1;
else
left= mid +1;
}
}
return -1;
}
};