• LeetCodeJava题解 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;
        }
    }
    
  • 相关阅读:
    ubuntu18.04 扩展根目录 亲测有效
    mysql数据恢复
    java多线程
    jenkins安装搭建及使用
    springboot web开发
    git版本管理
    docker安装部署项目
    vue nuxt项目部署
    IntelliJ IDEA常用快捷键
    IntelliJ IDEA常用设置
  • 原文地址:https://www.cnblogs.com/hooyeefam/p/15773245.html
Copyright © 2020-2023  润新知