1. class Solution {
    2. public:
    3. int search(vector<int>& nums, int target) {
    4. int left=0;
    5. int right=nums.size()-1;
    6. while(left<=right){
    7. int mid=left+(right-left)/2;
    8. if(nums[mid]==target){
    9. return mid;
    10. }
    11. if(nums[left]<=nums[mid]){
    12. if(target<nums[mid]&&target>=nums[left]){
    13. right=mid-1;
    14. }else{
    15. left=mid+1;
    16. }
    17. }else if(nums[left]>nums[mid]){
    18. if(target>nums[mid]&&target<=nums[right]){
    19. left=mid+1;
    20. }else{
    21. right=mid-1;
    22. }
    23. }
    24. }
    25. return -1;
    26. }
    27. };
    class Solution {
    public:
        bool search(vector<int>& nums, int target) {
            int left =0;
            int right =nums.size()-1;
            while(left<=right){
                int mid=left+(right-left)/2;
                if(nums[mid]==target){
                    return true;
                }
                if(nums[mid]>=nums[left]){
                    if(nums[left]==nums[right]&&nums[mid]==nums[left]){
                        left++;
                        right--;
                    }else if(nums[mid]>target&&target>=nums[left]){
                        right=mid-1;
                    }else{
                        left=mid+1;
                    }
                }else if(nums[mid]<nums[left]){
                    if(nums[mid]<target&&target<=nums[right]){
                        left=mid+1;
                    }else{
                        right=mid-1;
                    }
                }
            }
            return false;
        }
    };