题目:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
# left,right = 0,len(nums)-1
# res = []
# #首先判断是否为空
# if nums == []:
# return [-1,-1]
# #二分法寻找左索引
# while left+1<right:
# mid=(left+right)//2
# if nums[mid]>=target:
# right = mid
# else:
# left =mid
# if res==[]:
# if nums[0] == target:
# res.append(0)
# elif nums[right]==target and nums[left]!=target:
# res.append(right)
# else:
# return [-1,-1]
# #二分法寻找右索引
# left,right = 0,len(nums)-1
# while left+1<right:
# print(right)
# mid=(left+right)//2
# if nums[mid]>target:
# right = mid
# else:
# left = mid
# if nums[-1] == target:
# res.append(len(nums)-1)
# else:
# res.append(left)
# return res
if not nums:
return [-1, -1]
low, high = 0, len(nums) - 1
while low <= high:
mid = (low + high)//2
if target == nums[mid]:
l = r = mid
while l >= 0 and target == nums[l]:
l -= 1
while r <= len(nums)-1 and target == nums[r]:
r += 1
return [l+1, r-1]
if target < nums[mid]:
high = mid - 1
else:
low = mid + 1
return [-1, -1]