題目:
給定一個按照升序排列的整數數組 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