二分法找目标值左右端点

二分法找目标值左右端点


  • 找左端点
  • 找右端点
def search(nums, target):
  if not nums:
      return [-1, -1]
  def search_left(nums, target):
      left = 0
      right = len(nums)
      while left < right:
          mid = left + (right-left)/2
          if nums[mid] == target:
              right = mid
          elif nums[mid] < target:
              left = mid + 1
          elif nums[mid] > target:
              right = mid
      return left if left <= len(nums)-1 and nums[left] == target else -1
  def search_right(nums, target):
      left = 0
      right = len(nums)
      while left < right:
          mid = left + (right-left)/2
          if nums[mid] == target:
              left = mid + 1
          elif nums[mid] < target:
              left = mid + 1
          elif nums[mid] > target:
              right = mid
      return right-1 if nums[right-1] == target else -1
  return [search_left(nums, target), search_right(nums, target)]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容