mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
"""
|
|
34. Find First and Last Position of Element in Sorted Array
|
|
Difficulty: Medium
|
|
https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
|
|
|
|
──────────────────────────────────────────────────
|
|
|
|
Given an array of integers nums sorted in non-decreasing order, find
|
|
the starting and ending position of a given target value.
|
|
|
|
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]
|
|
|
|
|
|
|
|
Constraints:
|
|
|
|
• 0 <= nums.length <= 10^5
|
|
|
|
• -10^9 <= nums[i] <= 10^9
|
|
|
|
• nums is a non-decreasing array.
|
|
|
|
• -10^9 <= target <= 10^9
|
|
"""
|
|
|
|
|
|
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)]
|