LeetCode-Java题解 69. Sqrt(x)
题目地址:69. Sqrt(x)
解题思路:这道题虽然说是简单题,但是还是卡了我不少时间的。
首先是mid
的条件,一开始我写的是mid=(low+high)/2
,但是看大佬们的题解,都写成了mid = low + (high - low) / 2
,说是这样效率更高,我实测也比我之前的写法少了0.3MB
内存消耗。
其次是我似乎陷入了一种思维定式,之前写了mid*mid==x
这个多余的if条件,这也是可以改进的地方。
最后就是对特殊值0,1
的处理,避免多余的运算,以及计算平方的时候转换为long
类型,防止超出Int
的上限。
最为灵性的是要知道一个数的平方根不会大于这个数的一半
,这样可以极大减少计算量(缩短约一半)
class Solution {
public int mySqrt(int x) {
if (x == 0) {
return 0;
}
if (x == 1) {
return 1;
}
int low = 0;
//一个数的平方根不会超过一个数的一半(0和1除外)
int high = x/2;
int ans = -1;
while (low <= high) {
int mid = low + (high - low) / 2;
if ((long) mid * mid > x) {
high = mid - 1;
} else {
ans = mid;
low = mid + 1;
}
}
return ans;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧