from typing import List
classSolution:defsearchRange(self, nums: List[int], target:int)-> List[int]:
first_index = self.search_first(nums, target)
last_index = self.search_last(nums, target)return[first_index, last_index]defsearch_first(self, nums: List[int], target:int)-> List[int]:
left, right =0,len(nums)-1while left <= right:
mid = left +(right - left)//2if nums[mid]== target:if mid ==0or nums[mid -1]!= nums[mid]:return mid
else:
right = mid -1elif nums[mid]< target:
left = mid +1else:
right = mid -1return-1defsearch_last(self, nums: List[int], target:int)-> List[int]:
left, right =0,len(nums)-1while left <= right:
mid = left +(right - left)//2if nums[mid]== target:if mid ==len(nums)-1or nums[mid +1]!= nums[mid]:return mid
else:
left = mid +1elif nums[mid]< target:
left = mid +1else:
right = mid -1return-1if __name__ =="__main__":
s = Solution()
a = s.searchRange([5,7,7,8,8,10],8)print(a)
2.2 遍历法
from typing import List
classSolution:defsearchRange(self, nums: List[int], target:int)-> List[int]:
c =[-1,-1]for i inrange(len(nums)):if nums[i]== target:
c[0]= i # 第一个breakfor j inrange(len(nums)):if nums[j]== target:
c[1]= j # 到底,也就是末尾return c
if __name__ =="__main__":
s = Solution()
s.searchRange([5,7,7,8,8,10],8)