1 class Solution {
2 public:
3 int search(vector<int>& nums, int target) {
4 int l = 0, r = nums.size()-1;
5 while(l<=r){
6 int mid = l + (r-l)/2;
7 int curr = nums[mid];
8 int rval = nums[r];
9 int lval = nums[l];
10 if(target==curr) return mid;
11 // 后半有序,改等号是需要判断是否可能只有两个数
12 if(curr<=rval){
13 // 在此区间内
14 if(target>curr && target<=rval)
15 l = mid+1;
16 else
17 r = mid-1;
18 } else {
19 // 前半段有序且在区间内
20 if(target>=lval && target<curr)
21 r = mid-1;
22 else
23 l = mid+1;
24 }
25 }
26 return -1;
27 }
28 };