LeetCode34。最初と最後の位置JavaScriptでソートされた配列の要素を探します

昇順に配列された整数の配列を指定してnums、目標値targetアレイ内の所与の標的の開始および終了位置を特定します。

アルゴリズムのあなたの時間複雑でなければならないO(log n)レベル。

何のターゲット配列とリターンが存在しない場合[-1, -1]

例1:

入力:NUMS = [5,7,7,8,8,10]、目標 = 8
出力:[3,4]

例2:

入力:NUMS = [5,7,7,8,8,10]、目標 = 6
出力:[-1、-1]

参考答え:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function (nums, target) {
    let targetIndex = binarySearch(nums, target, 0, nums.length - 1)
    if (targetIndex == -1) return [-1, -1]
    let l = targetIndex, r = targetIndex
    while(l > 0 && nums[l - 1] == target){
        l--
    }
    while(r < nums.length - 1 && nums[r + 1] == target){
        r++
    }
    return [l, r]
};

function binarySearch(arr, val, lo, hi) {
    if (hi < lo) return -1
    let mid = lo + parseInt((hi - lo) / 2)

    if (val < arr[mid]) {
        return binarySearch(arr, val, lo, mid - 1)
    } else if (val > arr[mid]) {
        return binarySearch(arr, val, mid + 1, hi)
    } else {
        return mid
    }
}

おすすめ

転載: blog.csdn.net/weixin_40659167/article/details/87565001
おすすめ