题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/
难度:中等

描述:
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

提示:
数组长度:[0, 100000]

题解

思路:
分别找到target的左边界和右边界就行

  1. class Solution:
  2. def searchRange(self, nums: List[int], target: int) -> List[int]:
  3. return [self.get_left_border(nums, target), self.get_right_border(nums, target)]
  4. def get_left_border(self, nums, target):
  5. left, right = 0, len(nums) - 1
  6. while left < right:
  7. mid = (left + right) // 2
  8. if nums[mid] > target:
  9. right = mid - 1
  10. elif nums[mid] < target:
  11. left = mid + 1
  12. else:
  13. right = mid
  14. if right < 0:
  15. return -1
  16. else:
  17. return right if nums[right] == target else -1
  18. def get_right_border(self, nums, target):
  19. left, right = 0, len(nums) - 1
  20. while left < right:
  21. mid = (left + right + 1) // 2
  22. if nums[mid] < target:
  23. left = mid + 1
  24. elif nums[mid] > target:
  25. right = mid - 1
  26. else:
  27. left = mid
  28. if left >= len(nums):
  29. return -1
  30. else:
  31. return left if nums[left] == target else -1