/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
let l = 0,
r = nums.length - 1;
while (l <= r) {
const m = l + ((r - l) >> 1);
if (nums[m] === target) return m;
// m 位于左侧有序部分
if (nums[l] <= nums[m]) {
// m 大于 target,并且 target 大于左侧最小值,才缩小右边界
if (nums[m] > target && target >= nums[l]) r = m - 1;
else l = m + 1;
}
// m 位于右侧有序部分
else {
// m 小于 target,并且 target 小于右侧最大值,才缩小左边界
if (nums[m] < target && target <= nums[r]) l = m + 1;
else r = m - 1;
}
}
return -1;
};