给你一个按照非递减顺序排列的整数数组
nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值
target,返回[-1, -1]。你必须设计并实现时间复杂度为
O(log n)的算法解决此问题。
思路:找左边界就让等于target的放到right上一直逼近target的起始位置,直到左右边界left大约right后,left就是左边界。右边界相似。
- 找左边界 :遇到
nums[mid] < target就往右走,否则往左走 - 找右边界 :遇到
nums[mid] <= target就往右走,否则往左走
python
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
left, right = 0, n - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] < target:
left += 1
else:
right -= 1
frist = left
left = 0
right = n - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] <= target:
left += 1
else:
right -= 1
last = right
if frist <= last:
return [frist, last]
else:
return [-1, -1]