二分法查找时中间值的取定

记录原因:

刷题时发现一道二分法题怎么写都超时
老天,我从开始学编程就没注意过这事啊,mid一直是用 (b+e)/2表示啊
甚至一度怀疑二分法写错了,或者根本不是用二分法做的

然后我看了正确答案

int mid=b+(e-b)/2

将道理我好歹还比这个少一次加减法运算吧

超时的用例

索引范围:1-2126753390 (越2*10^9)
目标索引:1702766719

底层原因:

计算机采用补码表示,java int型4字节共32位:1位符号位+31位数值位
这时第一次mid取值大概10^9
第二次计算mid时(10^9+ 2126753390)会溢出,符号位变成1,结果为负数,接下来的计算就会不断循环直到超时
image

*想要不超可以用long,但是来回转型有点麻烦,特别是接口给的是int型
而且浪费空间

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