news 2026/7/16 10:24:11

二分查找中处理边界条件,避免死循环

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二分查找中处理边界条件,避免死循环
def halfcheck(self,strs,start,minl): start = start end =minl while start<end: lengthmid =(end-start+1)//2+start if self.isCommonPrefix(strs,lengthmid): start =lengthmid else: end = lengthmid-1 return strs[0][:start]

当换成lengthmid =(end-start)//2+start就可能存在问题

指出的这个细节非常关键。这是二分查找中处理边界条件时的常见问题。

问题分析

原始代码:(end-start+1)//2+start

这是向上取整的计算方式:

  • end-start+1是奇数时,中点偏右
  • end-start+1是偶数时,取两个中间点中靠右的那个
  • 这能避免死循环

修改后:(end-start)//2+start

这是向下取整的计算方式:

  • end-start+1是偶数时,中点偏左
  • 在某些边界条件下会导致死循环

例子说明

假设start=0,end=1,查找区间是[0,1]

原始代码(向上取整):

lengthmid=(1-0+1)//2+0=2//2+0=1+0=1# 检查位置1

修改后(向下取整):

lengthmid=(1-0)//2+0=1//2+0=0+0=0# 检查位置0

死循环场景

假设我们要检查前缀长度,startend相邻时:

# 场景:start=0, end=1whilestart<end:# 0 < 1,进入循环# 向下取整lengthmid=(1-0)//2+0=0if条件满足:# 假设这个条件在lengthmid=0时成立start=lengthmid# start = 0,没有变化!else:end=lengthmid-1# 不会执行# 现在 start=0, end=1,又回到了循环开始的状态# 死循环!

正确做法

方案1:保持向上取整(你的原始代码)

lengthmid=(end-start+1)//2+start

方案2:修改循环条件和更新逻辑

defhalfcheck(self,strs,start,minl):left,right=start,minlwhileleft<=right:# 改为 <=mid=(right-left)//2+leftifself.isCommonPrefix(strs,mid):# 向右查找left=mid+1else:# 向左查找right=mid-1returnstrs[0][:right]# 注意返回right

总结

代码使用(end-start+1)//2+start正确的,这是为了避免在二分查找时陷入死循环。改为向下取整在某些边界条件下确实会导致问题。

核心原则:二分查找中,mid的计算、循环条件、边界更新必须三者一致,否则可能死循环或漏查。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 1:38:33

AI内容创业第一步:一小时搭建Z-Image-Turbo商用图像生成服务

AI内容创业第一步&#xff1a;一小时搭建Z-Image-Turbo商用图像生成服务 如果你正计划通过AI生成图像开展内容创业&#xff0c;但苦于缺乏技术团队支持&#xff0c;Z-Image-Turbo可能是最快速的商业化解决方案。这款基于通义多模态技术的文生图模型&#xff0c;能以16GB显存流畅…

作者头像 李华
网站建设 2026/7/15 1:37:08

教育特供版:如何在校园网环境下快速部署Z-Image-Turbo

教育特供版&#xff1a;如何在校园网环境下快速部署Z-Image-Turbo 作为一名计算机实验室管理员&#xff0c;你是否遇到过这样的困境&#xff1a;想要为学生搭建AI图像生成学习环境&#xff0c;但校园网的网络限制、软件安装权限等问题让部署变得异常困难&#xff1f;本文将介绍…

作者头像 李华
网站建设 2026/7/10 9:08:59

跨平台解决方案:在Windows/Mac上快速运行Z-Image-Turbo

跨平台解决方案&#xff1a;在Windows/Mac上快速运行Z-Image-Turbo 作为一名设计师&#xff0c;你是否遇到过这样的困扰&#xff1a;Mac电脑上难以运行那些专为Windows优化的AI图像生成工具&#xff1f;Z-Image-Turbo作为阿里开源的6B参数图像生成模型&#xff0c;通过创新的8步…

作者头像 李华
网站建设 2026/7/14 17:49:50

群体智能优化深度学习恶意代码检测【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 基于API调用序列的恶意代码特征提取恶意代码无论采用何种混淆或加壳技术规避检测…

作者头像 李华
网站建设 2026/7/15 2:15:33

JAVA源码:24小时无人共享扫码洗车方案

以下是一套基于Java的24小时无人共享扫码洗车方案源码设计&#xff0c;整合微服务架构、物联网通信、AI视觉识别与高并发处理技术&#xff0c;实现全流程自动化洗车服务&#xff1a;一、系统架构设计mermaidgraph TD A[用户端] --> B[API网关] B --> C[业务微服务层] C -…

作者头像 李华
网站建设 2026/7/15 2:15:32

JAVA同城陪诊:上门服务医院陪护小程序源码

以下是一套基于Java的同城陪诊、上门服务及医院陪护小程序的源码设计方案&#xff0c;该方案整合了前后端分离架构、微服务架构以及多端适配技术&#xff0c;旨在提供一套稳定、高效、可扩展的陪诊服务系统&#xff1a;一、技术架构核心框架&#xff1a;Spring Boot 3.x&#x…

作者头像 李华