mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 21:22:43 +00:00
61 lines
1.6 KiB
Plaintext
61 lines
1.6 KiB
Plaintext
---
|
|
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)]
|
|
```
|