---
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)]
```
