Two binary searches: one biased left, one biased right.
function searchRange(nums, target): first = findFirst(nums, target) if first == -1: return [-1, -1] last = findLast(nums, target) return [first, last]
function findFirst(nums, target): left, right = 0, len(nums) - 1 result = -1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: result = mid right = mid - 1 elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return result
function findLast(nums, target): left, right = 0, len(nums) - 1 result = -1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: result = mid left = mid + 1 elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return result
time, space.