力扣704-二分查找【学习笔记】

33 阅读1分钟

问题:给定一个数组,找到目标值对应下标并返回

难点:确定区间范围

左闭右闭 [ left, right ]

var search = function(nums, target) {
    let left = 0//左边界
    let right = nums.length-1//右边界(包含)
    while(left<=right){
        let mid = Math.floor((right - left) / 2) + left;
        //let mid = Math.floor((right + left) / 2)
        if(nums[mid]<target){//目标值在右半区间
            left = mid+1//更新左下标(包含左)
        }else if(nums[mid]>target){//目标值在左半区间
            right = mid-1//更新右下标(包含右)
        }else{
            return mid
        }
    }
    return -1
};

左闭右开 [ left, right )

var search = function(nums, target) {
    let left = 0//左边界
    let right = nums.length//右边界(不包含)
    while(left<right){
        let mid = Math.floor((right + left) / 2)
        if(nums[mid]<target){//目标值在右半区间
            left = mid+1//更新左下标(包含左)
        }else if(nums[mid]>target){//目标值在左半区间
            right = mid//更新右下标,不包含mid
        }else{
            return mid
        }
    }
    return -1
};