二分法查找时中间值的取定
记录原因:
刷题时发现一道二分法题怎么写都超时
老天,我从开始学编程就没注意过这事啊,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,结果为负数,接下来的计算就会不断循环直到超时
*想要不超可以用long,但是来回转型有点麻烦,特别是接口给的是int型
而且浪费空间
本文来自博客园,作者:荧惑微光,转载请注明原文链接:https://www.cnblogs.com/yinghuoweiguang/p/15766191.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具