二分查找 - 相关基础算法总结
问题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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具