搜索旋转排序数组
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
};