leetcode 69. x 的平方根-java实现

题目所属分类

简单的二分

原题链接

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

代码案例:输入:x = 4
输出:2

题解

就是y*y小于等于x 我们要找到满足条件的最大y
首先就是二分法 然后mid^2 <= x 答案就在mid的右边
所以答案的范围就是[mid,x] 更新的话就是l = mid
另一半就是[l,mid-1] r=mid-1
由于是l = mid 所以求mid的时候要加一

class Solution {
    public int mySqrt(int x) {
        int l = 0 ;
        int r = x ;
        while( l < r ){
           // int mid = l + r + 1  >> 1 ;
            int mid = (int)(l + r + 1L  >> 1) ; //这里可能会越界
            //mid 平方可能越界
            if(mid  <= x / mid) l = mid ;
            else r = mid - 1 ;
        }
        return l ;
    }
}
posted @ 2022-10-11 18:57  依嘫  阅读(25)  评论(0)    收藏  举报