Sqrt(x)

Implementint sqrt(int x).

Compute and return the square root ofx.

分析

1 .用long 表示start, end.

2.结果<=x,不是==x

3.先移动start 还是end?只能移动s,e不行.可能是因为while里先移动e的话条件是m * m >= x.但是最后的答案是需要m * m <= x。所以需要先移动s。下次做二分先移动哪个需要看题目的条件。

答案

class Solution {
    public int mySqrt(int x) {
       if(x == 0)
           return 0;
        long s = 1, e = x;

        while(s + 1 < e){
            long m = s + (e - s) / 2;
            if(m * m <= x){
                s = m;
            }else{
                e = m;
            }
        }

//此处先判断s的话也行
        if(e * e <= x){
            return (int)e;
        }

        return (int)s;

    }
}

用花花模板,只能闭区间,开区间那个不行

用m > x / m 不用m*m>x是为了防止溢出,不过Python没事

newton

Last updated

Was this helpful?