从循环排序的数组中搜索一个数:思路二分查找,如果nums[first]<=nums[mid] 则数组前半部分为排序好的序列,否则后半部分为排序好的序列,然后根据与目标查找数比较,开始在前半/后半部分进行二分查找。
class Solution {
public:int search(vector<int>& nums, int target) {
int first = 0 , last = nums.size();
while(first!=last){
const int mid = first + (last - first)/2 ;
if(nums[mid] == target){
return mid;
}
if(nums[first]<=nums[mid]){
if(nums[first]<=target && target<nums[mid])
last=mid;
else
first = mid+1;
}
else{
if (nums[mid]<target && target<=nums[last-1])
first=mid+1;
else
last=mid;
}
}
return -1;
}
};