# 数组 ## 二分 ```python def binary_search(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 # 防止溢出 if nums[mid] == target: return mid # 找到目标,返回索引 elif nums[mid] < target: left = mid + 1 # 目标在右半部分 else: right = mid - 1 # 目标在左半部分 return -1 # 未找到目标 # 左右边界 def left_bound(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] < target: left = mid + 1 else: right = mid - 1 return left if left < len(nums) and nums[left] == target else -1 def right_bound(nums, target): left, right = 0, len(nums) - 1 while left <= right: mid = left + (right - left) // 2 if nums[mid] <= target: left = mid + 1 else: right = mid - 1 return right if right >= 0 and nums[right] == target else -1 ```