Skip to content

Code:

js
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */

// 二分查找 但是,重复的元素明显是 线性的
var searchRange = function(nums, target) {
    // console.log(nums, target)

    let i = 0
    let j = nums.length - 1

    while(i <= j) {
        const m = Math.floor((i + j) / 2)

        if (target === nums[m]) {
            const arr = [m, m]

            while(nums[arr[0] - 1] === target) {
                arr[0]--
            }

            while(nums[arr[1] + 1] === target) {
                arr[1]++
            }

            return arr
        } else if (target > nums[m]) {
            i = m + 1
        } else {
            j = m - 1
        }
    }


    return [-1, -1]
};


var searchRange = function(nums, target) {
    // console.log(nums, target)

    const fn = target => {
        let i = 0
        let j = nums.length

        while(i < j) {
            const m = Math.floor((i + j) / 2)

            if (target > nums[m]) {
                i = m + 1
            } else {
                j = m
            }
        }

        return i
    }

    const left = fn(target)

    if (left === nums.length || nums[left] !== target) {
        return [-1, -1]
    }

    const right = fn(target + 1) - 1
    return [left, right]
};


console.log(searchRange([5,7,7,8,8,10], 6))

❤ With Algorithm