思路:
要求复杂度nlogn,直接遍历复杂度是n,要用二分查找
注意边界上下取整!
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
if len(nums)==0:
return [-1,-1]
l=self.findleft(nums,target)
if l==-1:
return [-1,-1]
r=self.findright(nums,target)
return [l,r]
def findleft(self,nums,target):
left=0
right=len(nums)-1
while left<right:
mid = left + (right - left) // 2#用/2会出现小数
if nums[mid]<target:
left=mid+1
elif nums[mid]==target:#mid是一个目标,mid前可能还有
right=mid
else:
#nums[mid]>target
right=mid-1
if nums[left] == target:
return left
else:
return -1
def findright(self,nums,target):
left=0
right=len(nums)-1
while left<right:
mid = left + (right - left + 1) // 2
if nums[mid]>target:
right=mid-1
elif nums[mid]==target:#mid是一个目标,mid后可能还有
left=mid
else:
#nums[mid]<target
left=mid+1
return left#如果l存在,那r肯定存在
right = mid
和left = mid + 1
和mid = left + (right - left) / 2
;一定是配对出现的;right = mid - 1
和left = mid
和mid = left + (right - left + 1) /2
; 一定是配对出现的。