在有序数组中,查找某个元素的开始位置和结束位置
方法1:采用 Python 自带二分查找库 bisect
import bisect
class Solution:
def searchRange(self, nums: list[int], target: int) -> list[int]:
left = bisect.bisect_left(nums, target)
if left == len(nums) or nums[left] != target:
return [-1, -1]
else:
right = bisect.bisect_right(nums, target) - 1
return [left, right]
方法2:自己实现二分查找
class Solution:
def searchRange(self, nums: list[int], target: int) -> list[int]:
if len(nums) == 0:
return [-1, -1]
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < target:
left = mid + 1
else:
right = mid - 1
start = left
if start > len(nums) - 1 or nums[start] != target:
return [-1, -1]
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] <= target:
left = mid + 1
else:
right = mid - 1
end = right
return [start, end]