题目
思路分析
题目要求:找出目标元素在有序数组中的起始和终止位置
- 由于有序,先折半找到相应位置
- 再向两边拓展,找到出现的第一个和最后一个
代码展示
class Solution:
def searchRange(self, nums, target):
if nums ==[] :
return[-1,-1]
left = 0
right = len(nums)-1
res = [0,0]
mid = (left+right)//2
#找到目标值的位置
while left<=right:
mid = (left+right)//2
if nums[mid] == target:
break
elif nums[mid] < target:
left = mid+1
else:
right = mid-1
#向左,向右 判断
if nums[mid]==target:
i,j = mid,mid
while True:
if i>0 and nums[i-1]==target:
i-=1
else:
break
while True:
if j<len(nums)-1 and nums[j+1]==target:
j+=1
else:
break
res[0],res[1] = i,j
return res
else:
return[-1,-1]
if __name__ == "__main__":
a = Solution()
print(a.searchRange([5,7,7,8,8,10],8))