从循环排序的数组中搜索一个数:思路二分查找,如果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; } };