8. 33. Search in Rotated Sorted Array
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
Last updated
Input: nums = [4,5,6,7,0,1,2], target = 0
Output: 4
Input: nums = [4,5,6,7,0,1,2], target = 3
Output: -1
Last updated
Input: nums = [1], target = 0
Output: -1
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let s = 0;
let e = nums.length - 1;
while (s < e) {
const m = s + Math.floor((e - s) / 2);
if (nums[m] <= nums[e]) {
e = m;
} else {
s = m + 1;
}
}
const pivot = e;
if (nums[pivot] <= target && target <= nums[nums.length - 1]) {
s = pivot - 1;
e = nums.length;
} else {
s = -1;
e = pivot;
}
// 0,1,2,2,2,3,4,5,6
while (s + 1 < e) {
const m = s + Math.floor((e - s) / 2);
if (target <= nums[m]) {
e = m;
} else {
s = m;
}
}
return nums[e] === target ? e : -1;
};