二分查找的边界条件

var start = 0;  var end = nums.length - 1;  // 初始条件
    var mid = 0;
    while(start <= end) {   // 循环条件
        mid2 = Math.floor((start + end) / 2);  // 取整方式
        if (target > nums[mid]) {   // 判断条件
            start = mid + 1             // 判断条件
        } else if (target < nums[mid]) {   // 判断条件
            end = mid - 1    // 判断条件
        } else {                // 判断条件
            return mid          //判断条件
        }
    }
    return -1    //收尾
条件\区间 ( )开区间 (]  左开右闭 [) 左闭右开 [] 闭区间
任意一点 任意一点 任意一点 任意一点 最左的点 最右的点
初始条件 start

-1 

-1

0  

0  

end

nums.length

nums.length-1

nums.length

nums.length-1

循环条件

start < end - 1  

start < end  

start < end   

start <= end   

start < end  

start < end  

最后一次循环

(a,b,c)

(a,b]

[a,b)

[a]

[a,b]

[a,b]

取整方式 向上/向下 向上

向下

向上/向下 向下 向上
判断条件

target >

nums[mid]

start = mid

start = mid

start = mid+1

start = mid+1

start = mid+1

start = mid

target ===

nums[mid]

return mid

return mid

return mid

return mid

end = mid

target <

nums[mid]

end = mid

end = mid-1

end = mid

end = mid-1

end = mid-1

收尾retrun

-1

-1 -1 -1

nums[end] === target ? end : -1

或 nums[start] === target ? start : -1

猜你喜欢

转载自www.cnblogs.com/natsu07/p/10351118.html