banner
ekko

ekko's blog

时间不在于你拥有多少,而在于你怎样使用
github
xbox
email

Xの平方根

説明#

int sqrt(int x) 関数を実装します。

非負整数 x の平方根を計算して返します。

返り値の型が整数であるため、結果は整数部分のみ保持され、小数部分は切り捨てられます。

例 1:

入力: 4
出力: 2

例 2:

入力: 8
出力: 2
説明: 8の平方根は2.82842...であり、
     返り値の型が整数であるため、小数部分は切り捨てられます。

アプローチ#

  • 無駄な暴力解法、1 から始めて自乗を求め、結果が x より大きい場合はその値を出力し、1 を減らす
int mySqrt(int x){
    for(long i=1;;i++) {
        if(i*i > x)
            return (int)i-1;
    }
}

アプローチ 2#

  • 前述の方法に加えて、自増のスパンを増やし、広い範囲を探索し、最終値を逆順に探索する
int mySqrt(int x){
    long first = 1;
    for(;first < x;first *= 2)
        if(first * first >= x)
            break;
    for(long second = first;;second--)
        if(second * second <= x)
            return second;
}

アプローチ 3#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。