关于leetcode:33搜索旋转排序数组-算法leetode附思维导图-全部解法300题

零 题目:算法(leetode,附思维导图 + 全副解法)300题之(33)搜寻旋转排序数组

一 题目形容


二 解法总览(思维导图)

三 全副解法

1 计划1

1)代码:

// 计划1 “忽视要求,间接调用 indexOf 等函数”
var search = function(nums, target) {
    return nums.indexOf(target);
};

2 计划2

1)代码:

// 计划2 “忽视要求,单指针”

// 技巧:
// 1)nums是有序的,而后以某个下标进行翻转。
// 2)通过观察,能够得悉 新的nums 走势根本就是 “升序-降序-升序”。

// 思路(整体分2种状况):
// 1)状态初始化
// 2)分 2种 状况 。
// 2.1)若 nums[left] <= target ,则 一直判断 nums[left] === target 。
// 若 相等,则 间接返回 left,否则 left++ 。
// 2.2)若 nums[right] >= target ,则 一直判断 nums[right] === target 。
// 若 相等,则 间接返回 right,否则 right-- 。
var search = function(nums, target) {
    // 1)状态初始化
    const l = nums.length;
    let left = 0,
        right = l - 1;
    
    // 2)分 2种 状况 。
    // 2.1)若 nums[left] <= target ,则 一直判断 nums[left] === target 。
    // 若 相等,则 间接返回 left,否则 left++ 。
    if (nums[left] <= target) {
        while(left < l) {
            if (nums[left] === target) {
                return left;
            }
            left++;
        }
        return -1;
    }
    // 2.2)若 nums[right] >= target ,则 一直判断 nums[right] === target 。
    // 若 相等,则 间接返回 right,否则 right-- 。
    else if(nums[right] >= target){
        while(right >= 0) {
            if (nums[right] === target) {
                return right;
            }
            right--;
        }
        return -1;
    }

    // 边界case: [4,5,6,7,0,1,2] 3
    return -1;
}

3 计划3

1)代码:

// 计划3 “二分查找”。
// 技巧:O(log n)的工夫复杂度 --> “二分查找” 。

// 参考:
// 1)https://leetcode-cn.com/problems/search-in-rotated-sorted-array/solution/ji-jian-solution-by-lukelee/
var search = function(nums, target) {
    const l = nums.length;
    let left = 0,
        right = l - 1;
    
    while (left < right) {
        let mid = parseInt((left + right) / 2);
        if ((nums[0] > target) ^ (nums[0] > nums[mid]) ^ (target > nums[mid])) {
            left = mid + 1;
        }
        else {
            right = mid;
        }
    }

    return left === right && nums[left] === target ? left : -1;
};

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理