1 class Solution {
2 public:
3 bool search(vector<int>& nums, int target) {
4 if(nums.empty())
5 return false;
6 int begin=0,end=nums.size()-1;
7 while(begin<=end)
8 {
9 int mid=(begin+end)/2;
10 if(nums[mid]==target)
11 return true;
12 if(nums[mid]>nums[begin])//说明翻转点在后半部分,翻转之后,以翻转点为中心,后半部分一定小于等于前半部分
13 {
14 if(target>=nums[begin]&&target<nums[mid])
15 end=mid-1;
16 else
17 begin=mid+1;
18 }
19 else if(nums[mid]<nums[begin])//说明翻转点在前半部分,nums[mid...end]一定是有序的,并且是小于等于nums[begin],
20 {
21 if(target>nums[mid]&&target<=nums[end])
22 begin=mid+1;
23 else
24 end=mid-1;
25 }
26 else
27 {
28 begin++;
29 }
30 }
31 return false;
32 }
33 };