Leetcode JAVA刷刷站(69)x的平方根

一、题目概述

二、思路方向

在Java中,计算一个非负整数x的算术平方根,并返回其整数部分,你可以使用二分查找法。这是因为平方根函数是单调递增的,所以我们可以利用二分查找在合理的时间复杂度内找到结果。

三、代码实现

java 复制代码
public class Solution {  
    public int mySqrt(int x) {  
        if (x == 0) {  
            return 0;  
        }  
  
        long left = 1, right = x; // 使用long类型避免平方时溢出  
        while (left <= right) {  
            long mid = left + (right - left) / 2; // 防止溢出  
            long square = mid * mid;  
  
            if (square == x) {  
                return (int) mid;  
            } else if (square < x) {  
                left = mid + 1;  
            } else {  
                right = mid - 1;  
            }  
        }  
  
        // 当left > right时,循环结束,right为最接近x的平方根的整数(向下取整)  
        return (int) right;  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        int x = 9;  
        System.out.println("The square root of " + x + " is " + solution.mySqrt(x));  
  
        x = 8;  
        System.out.println("The square root of " + x + " is " + solution.mySqrt(x));  
    }  
}

执行结果:

四、小结

在这个例子中,我们使用了long类型来存储leftrightmid的值,以防止在计算mid * mid时可能出现的整数溢出。注意,在计算平方后,我们立即将其与x进行比较,以决定下一步的搜索范围。

循环会持续进行,直到left大于right。此时,right变量将包含最接近x的平方根的整数(向下取整)。这是因为我们在square > x时将right设置为mid - 1,从而确保我们不会错过任何可能的解,并且最终将right定位到最接近但不大于x的平方根的整数。

最后,我们将right的值转换为int类型并返回,因为题目要求返回的是整数部分。

结语

勇者无畏

于人生瀚海乘风破浪

!!!

相关推荐
_周游2 分钟前
Java8 API文档搜索引擎_3.搜索模块(实现细节)
java·搜索引擎·intellij-idea
我爱工作&工作love我3 分钟前
P4913 【深基16.例3】二叉树深度 dfs-二叉树的遍历
算法·深度优先·图论
人道领域6 分钟前
SSM从入门到入土(Spring Bean实例化与依赖注入全解析)
java·开发语言·spring boot·后端
TracyCoder12310 分钟前
LeetCode Hot100(25/100)——2. 两数相加(链表)
算法·leetcode·链表
long31611 分钟前
Z算法(线性时间模式搜索算法)
java·数据结构·spring boot·后端·算法·排序算法
毕设源码-赖学姐11 分钟前
【开题答辩全过程】以 基于Java web的宠物领养系统的设计与实现为例,包含答辩的问题和答案
java·开发语言·宠物
瑞雪兆丰年兮18 分钟前
[从0开始学Java|第十三天]面向对象进阶(static&继承)
java·开发语言
小楼v20 分钟前
如何实现AI生成应用部署功能
java·后端·ai·部署
望未来无悔21 分钟前
系统学习算法 专题十九 优先级队列(堆)
java·算法
啊阿狸不会拉杆22 分钟前
《机器学习导论》第3章 -贝叶斯决策理论
人工智能·python·算法·机器学习·numpy·深度优先·贝叶斯决策理论