--- title: '34. Find First and Last Position of Element in Sorted Array' description: Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value icon: dot topics: - { name: "Array", slug: "array" } - { name: "Binary Search", slug: "binary-search" } issue: "https://github.com/prdlk/leetcode/issues/65" sidebar: label: 'Find First and Last Position of Element in Sorted Array' badge: 'Medium' --- ::::warning 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]` ### Constraints: - `0 <= nums.length <= 10^5` - `-10^9 <= nums[i] <= 10^9` - `nums` is a non-decreasing array. - `-10^9 <= target <= 10^9` ## Solution ```py class Solution: def searchRange(self, nums: list[int], target: int) -> list[int]: def find(first): result = -1 left, right = 0, len(nums) - 1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: result = mid if first: right = mid - 1 else: left = mid + 1 elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return result return [find(True), find(False)] ```