搜索旋转排序数组
2022/07/17
https://leetcode.cn/problems/search-in-rotated-sorted-array/
示例
示例一
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4
示例二
输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1
示例三
输入:nums = [1], target = 0
输出:-1
题解参考
双指针
根据题目描述,可以确定该数组以k位置分割,左右两边的排序是升序;那么可以利用这个k作为中间点,在left与k之间,right与k之间,寻找target;
var search = function (nums, target) {
const n = nums.length
if (n === 0) {
return -1
}
if (n === 1) {
return nums[0] === target ? 0 : -1
}
let left = 0
let right = n - 1
while (left <= right) {
const mid = Math.floor((left + right) / 2)
if (nums[mid] === target) {
return mid
}
if (nums[0] <= nums[mid]) {
if (nums[0] <= target && target < nums[mid]) {
right = mid - 1
} else {
left = mid + 1
}
} else {
if (nums[mid] < target && target <= nums[n - 1]) {
left = mid + 1
} else {
right = mid - 1
}
}
}
return -1
};