题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/
难度:中等
描述:
给定一个按照升序排列的整数数组 nums
,和一个目标值 target
。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
提示:
数组长度:[0, 100000]
题解
思路:
分别找到target
的左边界和右边界就行
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
return [self.get_left_border(nums, target), self.get_right_border(nums, target)]
def get_left_border(self, nums, target):
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right) // 2
if nums[mid] > target:
right = mid - 1
elif nums[mid] < target:
left = mid + 1
else:
right = mid
if right < 0:
return -1
else:
return right if nums[right] == target else -1
def get_right_border(self, nums, target):
left, right = 0, len(nums) - 1
while left < right:
mid = (left + right + 1) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
else:
left = mid
if left >= len(nums):
return -1
else:
return left if nums[left] == target else -1