二分查找 - 相关基础算法总结

问题1:寻找 target 位置,没有返回 - 1
问题2:从右往左,寻找 < target 的第一个位置
问题3:从左往右,寻找 > target 的第一个位置
问题4:从右往左,寻找 <= target 的第一个位置
问题5:从左往右,寻找 >= target的 第一个位置

以上问题是求很多解力扣算法题的基础,需要好好的掌握:

 

问题1:寻找 target 位置,没有返回 - 1

def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
return mid
return -1

问题2:从右往左,寻找 < target 的第一个位置

def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
j = mid - 1
return j

问题3:从左往右,寻找 > target 的第一个位置

def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
i = mid + 1
return i

问题4:从右往左,寻找 <= target 的第一个位置

def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
if j == mid: break
j = mid
return j

问题5:从左往右,寻找 >= target的 第一个位置

def binary_search(nums: list[int], target: int) -> int:
i = 0
j = len(nums) - 1
while i <= j:
mid = (i + j) // 2
if nums[mid] > target: j = mid - 1
elif nums[mid] < target: i = mid + 1
# 核心点:相等情况处理
else:
if i == mid: break
i = mid
return i

 

posted @   lenbkan  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示

目录导航