class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @param target int整型 
     * @return int整型
     */
    bool check(vector<int>& nums, int target, int i) {
        if (nums[i] > nums.back()) {
            return target <= nums.back() || target > nums[i];
        }
        return target > nums[i] && target <= nums.back();

    }

    int search(vector<int>& nums, int target) {
        int l = 0, r = nums.size() - 1;
        while (l <= r) {
            int m = l + (r - l) / 2;
            if (check(nums, target, m)) {
                l = m + 1;
            } else {
                r = m - 1;
            }
        }
        return l == nums.size() || nums[l] != target ? -1: l;
    }
};

思路:二分查找。

与普通的二分查找一个思路,只不过有两种情况,分别画个图判断一下即可。