给定一个按照升序排列的整数数组 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]
class Solution: def searchl(nums, target): left, right = 0, len(nums) - 1 lb = -2 # 记录一下rightBorder没有被赋值的情况 while left <= right: mid = int(left + (right - left) / 2) if nums[mid] >= target: right = mid - 1 lb = right else: left = mid + 1 return lb def searchr(nums, target): left, right = 0, len(nums) - 1 rb = -2 # 记录一下rightBorder没有被赋值的情况 while left <= right: mid = int(left + (right - left) / 2) if nums[mid] > target: right = mid - 1 else: left = mid + 1 rb = left return rb if __name__ == '__main__': nums = [-1, 2, 5, 5, 7, 12] target = 5 left, right = 0, len(nums) - 1 m = [] leftBoder=Solution.searchl(nums, target) rightBoder = Solution.searchr(nums, target) # 情况一 if leftBoder == -2 or rightBoder == -2: print("[-1, -1]") # 情况三 else: if rightBoder - leftBoder > 1: print(leftBoder + 1, rightBoder - 1) # 情况二 else: print("[-1, -1]")