0
点赞
收藏
分享

微信扫一扫

力扣34,查找元素第一个和最后一个的位置(JavaScript)

贵州谢高低 2022-01-31 阅读 67

寻找左右边界的值

var searchRange = function(nums, target) {
   
    //两个子函数
    //查找左边界
    const left=function(nums, target){
        let l=0
        let r=nums.length-1
        let a=-2 //标记
        while(l<=r){
            let mid=l+Math.floor((r-l)>>1)
            
            if(target>nums[mid]){
                l=mid+1
            }else{   //如果target等于mid,继续左移查找边界
                //边界左移(r=mid-1)
                r=mid-1
                a=r
            }
        }
        //如果找不到左边界,则a=-2
        return a
    }
    //查找右边界
    const right=function(nums, target){
        let l=0
        let r=nums.length-1
        let b=-2 //标记
        while(l<=r){
            let mid=l+Math.floor((r-l)>>1)
            
            if(target<nums[mid]){
                r=mid-1
            }else{   //如果target等于mid,继续右移查找边界
                //边界右移(l=mid+1)
                l=mid+1
                b=l
            }
        }
        //如果找不到右边界,则b=-2
        return b
    }

    let l=left(nums, target)
    let r=right(nums, target)

    // 不在nums内
    if(l === -2 || r === -2) return [-1,-1];
    // 存在
    if (r - l > 1) return [l + 1, r - 1];
    // 
    return [-1, -1];};

举报

相关推荐

0 条评论