mirror of
https://github.com/labuladong/fucking-algorithm.git
synced 2025-07-05 12:04:37 +08:00
Update 二分查找详解.md
更新一些注释
This commit is contained in:
@ -537,19 +537,19 @@ def left_bound(nums, target):
|
|||||||
while left < right:
|
while left < right:
|
||||||
mid = (left + right) // 2
|
mid = (left + right) // 2
|
||||||
if nums[mid] == target:
|
if nums[mid] == target:
|
||||||
# 锁定边界
|
# 锁定左侧边界
|
||||||
right = mid
|
right = mid
|
||||||
elif nums[mid] < target:
|
elif nums[mid] < target:
|
||||||
left = mid + 1
|
left = mid + 1
|
||||||
elif nums[mid] > target:
|
elif nums[mid] > target:
|
||||||
right = mid
|
right = mid
|
||||||
# 检查越界情况
|
# 检查left越界情况
|
||||||
if left >= len(nums) or nums[left] != target:
|
if left >= len(nums) or nums[left] != target:
|
||||||
return -1
|
return -1
|
||||||
return left
|
return left
|
||||||
|
|
||||||
|
|
||||||
# 寻找右侧侧边界的二分搜索,开区间写法
|
# 寻找右侧边界的二分搜索,开区间写法
|
||||||
def right_bound(nums, target):
|
def right_bound(nums, target):
|
||||||
left, right = 0, len(nums)
|
left, right = 0, len(nums)
|
||||||
if right == 0:
|
if right == 0:
|
||||||
@ -557,48 +557,48 @@ def right_bound(nums, target):
|
|||||||
while left < right:
|
while left < right:
|
||||||
mid = (left + right) // 2
|
mid = (left + right) // 2
|
||||||
if nums[mid] == target:
|
if nums[mid] == target:
|
||||||
# 锁定边界
|
# 锁定右侧边界
|
||||||
left = mid + 1
|
left = mid + 1
|
||||||
elif nums[mid] < target:
|
elif nums[mid] < target:
|
||||||
left = mid + 1
|
left = mid + 1
|
||||||
elif nums[mid] > target:
|
elif nums[mid] > target:
|
||||||
right = mid
|
right = mid
|
||||||
# 检查越界情况
|
# 检查越界情况
|
||||||
if right < 0 or nums[left - 1] != target:
|
if left == 0 or nums[left - 1] != target:
|
||||||
return -1
|
return -1
|
||||||
return left - 1
|
return left - 1
|
||||||
|
|
||||||
|
|
||||||
# 左右边界闭区间写法,统一逻辑
|
# 寻找左侧边界的二分搜索,闭区间写法
|
||||||
def left_bound(nums, target):
|
def left_bound(nums, target):
|
||||||
left, right = 0, len(nums) - 1
|
left, right = 0, len(nums) - 1
|
||||||
while left <= right:
|
while left <= right:
|
||||||
mid = (left + right) // 2
|
mid = (left + right) // 2
|
||||||
if nums[mid] == target:
|
if nums[mid] == target:
|
||||||
# 锁定边界
|
# 锁定左侧边界
|
||||||
right = mid - 1
|
right = mid - 1
|
||||||
elif nums[mid] < target:
|
elif nums[mid] < target:
|
||||||
left = mid + 1
|
left = mid + 1
|
||||||
elif nums[mid] > target:
|
elif nums[mid] > target:
|
||||||
right = mid - 1
|
right = mid - 1
|
||||||
# 检查越界情况
|
# 检查left越界情况
|
||||||
if left >= len(nums) or nums[left] != target:
|
if left >= len(nums) or nums[left] != target:
|
||||||
return -1
|
return -1
|
||||||
return left
|
return left
|
||||||
|
|
||||||
|
# 寻找右侧边界的二分搜索,闭区间写法
|
||||||
def right_bound(nums, target):
|
def right_bound(nums, target):
|
||||||
left, right = 0, len(nums) - 1
|
left, right = 0, len(nums) - 1
|
||||||
while left <= right:
|
while left <= right:
|
||||||
mid = (left + right) // 2
|
mid = (left + right) // 2
|
||||||
if nums[mid] == target:
|
if nums[mid] == target:
|
||||||
# 锁定边界
|
# 锁定右侧边界
|
||||||
left = mid + 1
|
left = mid + 1
|
||||||
elif nums[mid] < target:
|
elif nums[mid] < target:
|
||||||
left = mid + 1
|
left = mid + 1
|
||||||
elif nums[mid] > target:
|
elif nums[mid] > target:
|
||||||
right = mid - 1
|
right = mid - 1
|
||||||
# 检查越界情况
|
# 检查right越界情况
|
||||||
if right < 0 or nums[right] != target:
|
if right < 0 or nums[right] != target:
|
||||||
return -1
|
return -1
|
||||||
return right
|
return right
|
||||||
|
Reference in New Issue
Block a user