news 2026/2/25 14:58:30

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

作者头像

张小明

前端开发工程师

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/2/24 8:05:19

解放生产力:如何用Z-Image-Turbo预置镜像加速创意工作流

解放生产力&#xff1a;如何用Z-Image-Turbo预置镜像加速创意工作流 对于设计团队来说&#xff0c;每周需要生成数百张产品概念图是一项繁重的任务。传统的手工绘制或使用普通AI工具往往效率低下&#xff0c;难以满足快速迭代的需求。Z-Image-Turbo作为一款基于8步蒸馏技术的开…

作者头像 李华
网站建设 2026/2/24 3:12:49

java学习网站,零基础入门到精通,收藏这篇就够了

目录 一、在线教程 1、How2J 的 Java教程2、w3cschool3、菜鸟教程4、易百教程5、码农教程6、简单教程7、Break易站8、C语言中文网9、并发编程网 二、视频教程 1、B站2、慕课网3、网易云课堂4、实验楼5、我要自学网 三、电子书 1、图灵社区2、博文视点3、书栈网4、脚本之家5、J…

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

Z-Image-Turbo进阶玩法:快速搭建自定义Lora训练环境

Z-Image-Turbo进阶玩法&#xff1a;快速搭建自定义Lora训练环境 作为一名AI艺术创作者&#xff0c;你是否遇到过这样的困扰&#xff1a;想要训练一个专属风格的Lora模型&#xff0c;却发现本地显卡显存不足&#xff0c;或者被复杂的依赖环境搞得焦头烂额&#xff1f;今天我要分…

作者头像 李华
网站建设 2026/2/23 19:11:12

模型融合实战:结合Z-Image-Turbo与Stable Diffusion的优势

模型融合实战&#xff1a;结合Z-Image-Turbo与Stable Diffusion的优势 作为一名AI图像生成爱好者&#xff0c;我经常遇到这样的困扰&#xff1a;Stable Diffusion擅长写实风格&#xff0c;Z-Image-Turbo在动漫创作上表现突出&#xff0c;但切换模型需要反复折腾环境依赖。最近…

作者头像 李华
网站建设 2026/2/24 7:19:21

Z-Image-Turbo安全部署指南:保护你的AI服务免受攻击

Z-Image-Turbo安全部署指南&#xff1a;保护你的AI服务免受攻击 为什么企业需要关注Z-Image-Turbo的安全部署 随着AI图像生成技术的快速发展&#xff0c;Z-Image-Turbo凭借其高效的8步蒸馏技术和亚秒级生成速度&#xff0c;正在成为企业级AI服务的热门选择。然而&#xff0c;任…

作者头像 李华
网站建设 2026/2/25 7:06:06

Thinkphp的社区诊所在线挂号与排队应用系统

目录社区诊所在线挂号与排队应用系统摘要项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理社区诊所在线挂号与排队应用系统摘要 该系统基于ThinkPHP框架开发&#xff0c;旨在优化社区诊所的挂号与排队流程&#xff0c;提升患者就医效率和诊所管理能…

作者头像 李华