LeetcodeAug 19, 2025

Find First and Last Position of Element in Sorted Array

Hazrat Ali

Leetcode

If target is not found in the array, return [-1, -1].

You must write an algorithm with O(log n) runtime complexity.

 

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

Example 3:

Input: nums = [], target = 0
Output: [-1,-1]


Solution
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
const searchRange = (nums, target) => {
  const lower = searchLowerBound(nums, target);
  const upper = searchUpperBound(nums, target);

  if (lower === -1) {
    return [-1, -1];
  }

  return [lower, upper];
};

const searchLowerBound = (nums, target) => {
  let lo = 0;
  let hi = nums.length - 1;

  while (lo <= hi) {
    const mid = lo + Math.floor((hi - lo) / 2);

    if (nums[mid] < target) {
      lo = mid + 1;
    } else if (nums[mid] > target) {
      hi = mid - 1;
    } else {
      if (mid === 0 || nums[mid - 1] < target) {
        return mid;
      } else {
        hi = mid - 1;
      }
    }
  }

  return -1;
};

const searchUpperBound = (nums, target) => {
  let lo = 0;
  let hi = nums.length - 1;

  while (lo <= hi) {
    const mid = lo + Math.floor((hi - lo) / 2);

    if (nums[mid] < target) {
      lo = mid + 1;
    } else if (nums[mid] > target) {
      hi = mid - 1;
    } else {
      if (mid === nums.length - 1 || nums[mid + 1] > target) {
        return mid;
      } else {
        lo = mid + 1;
      }
    }
  }

  return -1;
};




Comments