题目:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
思路:二分法,使用一个指针来找到数字的开头和结尾位置
程序:
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
result = [-1,-1]
length = len(nums)
head = 0
tail = length - 1
while head < tail:
middle = (head + tail) // 2
if target > nums[middle]:
head = middle + 1
else:
tail = middle
if nums[head] != target:
return result
result[0] = head
tail = length - 1
while head <= tail:
middle = (head + tail) // 2
if target >= nums[middle]:
head = middle + 1
else:
right = middle
result[1] = head - 1
return result