题目描述
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
思路
- 先用二分查找找到目标值
- 以找到的目标值为中心,分别从前,从后去看是否和目标值一样
- 返回【下标】
class Solution(object):
def searchRange(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
if len(nums)<=0:
return [-1,-1]
l=0
r=len(nums)-1
while l<r:
mid=l+(r-l)/2
if target>nums[mid]:
l=mid+1
else:
r=mid
if nums[l]==target:
while l>0 and nums[l-1]==target:
l-=1
while r<len(nums)-1 and nums[r+1]==target:
r+=1
return [l,r]
return [-1,-1]