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; } };
思路:二分查找。
与普通的二分查找一个思路,只不过有两种情况,分别画个图判断一下即可。