在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果数组中不存在目标值,返回 [-1, -1]。

const searchRange = (nums, target) => {
    let startIdx = 0
    let endIdx = nums.length - 1
    let index = -1  
    while(startIdx <= endIdx){
        const midIdx = Math.floor((endIdx + startIdx) / 2)
        const midVal = nums[midIdx]
        if(midVal > target){
            endIdx = midIdx - 1
        }else if(midVal < target){
            startIdx = midIdx + 1
        }else{
            index = midIdx
            break
        }
    }
    if(index === -1){
        return [-1,-1]
    }else {
        let res = [index, index]
        let leftIdx, rightIdx = index, rightIdx = index
        while(nums[++rightIdx] === target){
            res[1] = rightIdx
        }
        while(nums[--leftIdx] === target){
            res[0] = leftIdx
        }
        return res
    }
};

Leecode提交通过

posted @ 2020-07-20 16:44  671_MrSix  阅读(161)  评论(0编辑  收藏  举报