给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
示例 1:
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]
示例 2:
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
示例 3:
输入:nums = [], target = 0
输出:[-1,-1]
# 解题
# 定义解题方法
def fun1(nums, target):
nums = list(nums)
left = -1 # 默认匹配不到
right = -1
n = len(nums)
for i in range(n):
if nums[i] == target and left == -1: # 匹配到第一个值
left = i
if left > -1 and right == -1 and nums[left] < nums[i]: # 匹配到最后反转值
right = i - 1
if left > -1 and right == -1 and nums[left] == nums[n - 1]: # 匹配到尾部值
right = n - 1
return [left, right]
# 根据题目输入例子进行验证
nums = [5, 7, 8, 8, 8, 8]
target = 8
print(fun1(nums, target))