Skip to content

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

💻 代码实现

typescript
/**
 * @url https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/
 */

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function (nums, target) {
    return [searchFirst(nums, target), searchLast(nums, target)]
};

/** 搜索第一个元素 */
var searchFirst = function (nums, target) {
    let left = 0, right = nums.length - 1
    while (left <= right) {
        const mid = Math.floor((left + right) / 2)
        if (nums[mid] === target) {
            if (mid === 0 || nums[mid - 1] !== nums[mid]) {
                return mid
            } else {
                right = mid - 1
            }
        }
        if (nums[mid] < target) {
            left = mid + 1
        }
        if (nums[mid] > target) {
            right = mid - 1
        }
    }
    return -1
}

/** 搜索最后一个元素 */
var searchLast = function (nums, target) {
    let left = 0, right = nums.length - 1
    while (left <= right) {
        const mid = Math.floor((left + right) / 2)
        if (nums[mid] === target) {
            if (mid === nums.length - 1 || nums[mid] !== nums[mid + 1]) {
                return mid
            } else {
                left = mid + 1
            }
        }
        if (nums[mid] < target) {
            left = mid + 1
        }
        if (nums[mid] > target) {
            right = mid - 1
        }
    }
    return -1
}

Released under the MIT License.