搜索旋转排序数组

来源:1-2 算法面试只是面试的一部分

慕粉3884565

2021-11-28

var search = function (nums, target) {
    let leng = nums.length;
    if (leng < 1) {
        return -1;
    }
    if (leng === 1) {
        return target === nums[0] ? 0 : -1;
    }
    let l = 0;
    let r = leng - 1;
    while (l <= r) {
        let middle = Math.floor((l + r) / 2);
        if (nums[middle] === target) {
            return middle;
        }
        if (nums[0] <= nums[middle]) {
            if (nums[0] <= target && target < nums[middle]) {
                r = middle - 1;
            } else {
                l = middle + 1;
            }
        } else {
            if (nums[middle] < target && target <= nums[right]) {
                l = middle + 1;
            } else {
                r = middle - 1;
            }
        }
    }
};

老师这是代码关于边界问题我都晓得,现在疑问是

 if (nums[0] <= target && target < nums[middle]) {
                r = middle - 1;
            } else {
                l = middle + 1;
            }

这里哈如果进了这个IF判断标识target在这个范围为什么不用l=middle+1是因为如果这么运算会导致下标跃出有序的边界

其实我之前想的正好与代码相反就是l运算在if,r的运算是l,老师可以给我讲下这个疑惑吗,就是这点

写回答

1回答

liuyubobobo

2021-11-29

请问这是力扣第几号问题。谢谢。

0
4
liuyubobobo
回复
慕粉3884565
这段代码提交以后是 wa 的。
2021-11-30
共4条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程