题目描述
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
思路
代码
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
size = len(nums)
if size == 0:
return [-1,-1]
first_position = self.__find_first_position(nums,size,target)
if first_position == -1:
return [-1,-1]
last_position = self.__find_last_position(nums,size,target)
return [first_position, last_position]
def __find_first_position(self,nums,size,target):
left = 0
right = size - 1
while left < right:
mid = (left + right) >> 1
if nums[mid] < target:
left = mid + 1
else:
right = mid
if nums[left] == target:
return left
else:
return -1
def __find_last_position(self,nums,size,target):
left = 0
right = size - 1
while left < right:
mid = (left + right + 1) >> 1
if nums[mid] > target:
right = mid - 1
else:
left = mid
return left