问题1:寻找 target 位置,没有返回 - 1
问题2:从右往左,寻找 < target 的第一个位置
问题3:从左往右,寻找 > target 的第一个位置
问题4:从右往左,寻找 <= target 的第一个位置
问题5:从左往右,寻找 >= target的 第一个位置
以上问题是求很多解力扣算法题的基础,需要好好的掌握:
问题1:寻找 target 位置,没有返回 - 1
def binary_search(nums: list[int], target: int) -> int:i = 0j = len(nums) - 1while i <= j:mid = (i + j) // 2if nums[mid] > target: j = mid - 1elif nums[mid] < target: i = mid + 1# 核心点:相等情况处理else:return midreturn -1
问题2:从右往左,寻找 < target 的第一个位置
def binary_search(nums: list[int], target: int) -> int:i = 0j = len(nums) - 1while i <= j:mid = (i + j) // 2if nums[mid] > target: j = mid - 1elif nums[mid] < target: i = mid + 1# 核心点:相等情况处理else:j = mid - 1return j
问题3:从左往右,寻找 > target 的第一个位置
def binary_search(nums: list[int], target: int) -> int:i = 0j = len(nums) - 1while i <= j:mid = (i + j) // 2if nums[mid] > target: j = mid - 1elif nums[mid] < target: i = mid + 1# 核心点:相等情况处理else:i = mid + 1return i
问题4:从右往左,寻找 <= target 的第一个位置
def binary_search(nums: list[int], target: int) -> int:i = 0j = len(nums) - 1while i <= j:mid = (i + j) // 2if nums[mid] > target: j = mid - 1elif nums[mid] < target: i = mid + 1# 核心点:相等情况处理else:if j == mid: breakj = midreturn j
问题5:从左往右,寻找 >= target的 第一个位置
def binary_search(nums: list[int], target: int) -> int:i = 0j = len(nums) - 1while i <= j:mid = (i + j) // 2if nums[mid] > target: j = mid - 1elif nums[mid] < target: i = mid + 1# 核心点:相等情况处理else:if i == mid: breaki = midreturn i