1
/**
2
* @param {number[]} nums
3
* @param {number} target
4
* @return {number}
5
*/
6
var search = function (nums, target) {
7
const len = nums.length;
8
if (len === 1 && nums[0] === target) return 0;
9
const h = nums.findIndex(
10
(val, i) => nums[i === 0 ? nums.length - 1 : i - 1] > val
11
);
12
if (h !== 0) nums = nums.slice(h).concat(nums.slice(0, h));
13
// console.log(h, nums)
14
let lo = 0,
15
hi = len - 1;
16
while (lo !== hi) {
17
if (lo + 1 === hi) {
18
if (nums[lo] === target) return (lo + h) % len;
19
if (nums[hi] === target) return (hi + h) % len;
20
break;
21
}
22

23
const i = Math.floor((lo + hi + 1) / 2);
24
// console.log(lo, hi, i)
25
const val = nums[i];
26
if (val === target) return (i + h) % len;
27
if (val > target) hi = i;
28
else lo = i;
29
}
30

31
return -1;
32
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0