算法萌新闯力扣:x的平方根

    力扣热题:69.x的平方根

开篇

  这是一道练习二分查找的题目,简单但也有一些细节需要注意,如判断条件、溢出等。

题目链接:69.x的平方根

题目描述

算法萌新闯力扣:x的平方根_第1张图片

代码思路

1.一开始使用暴力解,发现超时了,看了标签,原来又是二分查找,做题太少了,敏感度有点差
2.知道是二分查找后,题目就非常好办了,只要你知道输出的数是如何判断就能解出:当前数的平方大于等于x,当前数加1的平方小于x

代码纯享版

class Solution {
    public int mySqrt(int x) {
        long low = 0, high = (long)x;
        while(low <= high){
            long mid = (low + high) / 2;
            if(mid * mid <= (long)x && (mid + 1) * (mid + 1) > (long)x) return (int)mid;
            else if(mid * mid > (long)x) high = mid - 1;
            else low = mid + 1;
        }
        return 0;
    }
}

代码逐行解析版

class Solution {
    public int mySqrt(int x) {
        long low = 0, high = (long)x; //利用二分查找来搜索目标值,查找过程中两数相乘可能会发生溢出,所以直接全部先变成long型。
        while(low <= high){
            long mid = (low + high) / 2; //二分查找的中间值
            if(mid * mid <= (long)x && (mid + 1) * (mid + 1) > (long)x) return (int)mid; //符合情况的mid值直接返回
            else if(mid * mid > (long)x) high = mid - 1; //根据二分查找的模版套入
            else low = mid + 1;
        }
        return 0; //无意义,单纯为了满足函数的规范
    }
}

结语

如果对这道力扣题的讲解对您有帮助,点个关注支持一下,我会每天为大家分享力扣题目,与大伙一起进步。

你可能感兴趣的:(Java算法,算法,leetcode,职场和发展,java,数据结构)