news 2026/6/15 1:39:28

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

作者头像

张小明

前端开发工程师

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/6/15 12:55:57

禁止魔法:企业内网部署合规AI图像生成方案

禁止魔法&#xff1a;企业内网部署合规AI图像生成方案 在金融行业&#xff0c;数据安全始终是重中之重。随着AI图像生成技术的普及&#xff0c;许多机构希望利用这项技术提升内部工作效率&#xff0c;但使用商用API往往意味着要将敏感数据上传至第三方服务器&#xff0c;存在信…

作者头像 李华
网站建设 2026/6/15 14:49:36

跨平台作战:多设备无缝衔接的AI绘画云工作流

跨平台作战&#xff1a;多设备无缝衔接的AI绘画云工作流 作为一名自由职业者&#xff0c;我经常需要在平板、笔记本和台式机之间切换工作环境。最让我头疼的就是AI绘画工具的配置问题——不同设备的性能差异、依赖库版本冲突、模型文件同步困难&#xff0c;这些问题严重影响了创…

作者头像 李华
网站建设 2026/6/15 11:43:58

Thinkphp的社区智慧养老系统

目录社区智慧养老系统基于ThinkPHP框架开发系统功能模块设计技术创新与应用价值社会效益与推广前景项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理社区智慧养老系统基于ThinkPHP框架开发 社区智慧养老系统采用ThinkPHP框架构建&#xff0c;旨在通…

作者头像 李华
网站建设 2026/6/15 13:53:05

Thinkphp的美食商城网站设计与实现

目录设计背景与目标技术架构核心功能模块创新点与优势实现成果项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理设计背景与目标 随着互联网技术发展&#xff0c;线上购物成为主流消费方式之一。美食商城网站基于ThinkPHP框架开发&#xff0c;旨在为…

作者头像 李华
网站建设 2026/6/15 14:20:18

24小时AI绘画挑战:用Z-Image-Turbo完成商业项目实战

24小时AI绘画挑战&#xff1a;用Z-Image-Turbo完成商业项目实战 前言&#xff1a;当插画需求遇上AI生产力 作为一名自由职业插画师&#xff0c;突然接到紧急商业项目需求是家常便饭。但这次客户要求在24小时内交付50张原创风格插画&#xff0c;传统手绘方式显然无法满足 deadli…

作者头像 李华
网站建设 2026/6/15 12:52:22

Z-Image-Turbo风格迁移:如何快速搭建环境实现名画风格AI创作

Z-Image-Turbo风格迁移&#xff1a;如何快速搭建环境实现名画风格AI创作 作为一名艺术系学生&#xff0c;研究不同绘画风格在AI生成中的应用是件既有趣又充满挑战的事情。但每次切换模型参数时&#xff0c;本地环境的配置和清理总是让人头疼。最近我发现Z-Image-Turbo这个强大的…

作者头像 李华