《代码随想录》学习笔记,原链接:34. 在排序数组中查找元素的第一个和最后一个位置
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
left, right = 0, len(nums) - 1 # 确定左右边界(左闭右闭)
while left <= right:
mid = (left + right) // 2 # 确定中点的位置,结果向下取整
if target < nums[mid]: # target位于左半区间
right = mid - 1
elif target > nums[mid]: # taget位于右半区间
left = mid + 1
else:
left = right = mid # 寻找target的左右边界
while left >= 0 and nums [left] == target: # 找左边界,注意不要越界
left -= 1
while right < len(nums) and nums[right] == target: # 找右边界,注意不要越界
right += 1
return [left + 1, right - 1] # 返回target的左右边界
return [-1, -1] # 未找到target
【注】找target的左右边界时,需要防止left和right越界
while left >= 0 and nums [left] == target: # 找左边界,注意不要越界
left -= 1
while right < len(nums) and nums[right] == target: # 找右边界,注意不要越界
right += 1