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

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

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

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

function searchRange(nums, target) {
    let getPreNextIndex = (val,index,arr) => {
        let returnArr = [index,index]
        if(index == 0){
            for(let i = index + 1;i < arr.length;i++){
                if(arr[i] == val){
                    returnArr[1] = i 
                }else{
                    break;
                }
            }
            return returnArr
        }
        if(index == arr.length -1){
            for(let i = index - 1;i > -1;i--){
                if(arr[i] == val){
                    returnArr[0] = i 
                }else{
                    break
                }
            }
            return returnArr
        }
        for(let i = index - 1;i > -1;i--){
            if(arr[i] == val){
                returnArr[0] = i 
            }else{
                break
            }
        }
        for(let i = index + 1;i < arr.length;i++){
            if(arr[i] == val){
                returnArr[1] = i 
            }else{
                break;
            }
        }
        return returnArr
    }
    if(nums.length == 1){
        if(nums[0] == target){
            return [0,0]
        }
        return [-1,-1]
    }
    let start = 0,end = nums.length - 1;
    while(start <= end){
        let mid = parseInt((start + end) / 2);
        if(target == nums[mid]){
            return getPreNextIndex(mid,nums,target)
        }else if(target > nums[mid]){
            start = mid + 1
        }else if(target < nums[mid]){
            end = mid - 1
        }
    }
    return [-1 ,-1]
}

Leecode提交通过

以自己现在的努力程度,还没有资格和别人拼天赋
原文地址:https://www.cnblogs.com/zhenjianyu/p/13345927.html