class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int left = 0, right = n-1;
        while(left <= right){
            int mid = left + (right-left)/2;
            if(nums[mid]==target)   return mid;
            // 旋转数组关键在于找到有序的部分,并检查target是否在这有序的部分里面,如果在可以利用二分查找,否则就在另外无序的一部分中查找
            // 此时,mid左侧是有序的
            if(nums[mid]>nums[n-1]){
                if(target < nums[mid] && target >= nums[left]){
                    right = mid-1;
                }else{
                    left = mid +1;
                }
            }else{  // 此时,mid右侧是有序的
                if(target > nums[mid] && target <= nums[right]){
                    left = mid +1;
                }else {
                    right = mid -1;
                }
            }
        }
        return -1;
    }
};