💡
69. Sqrt(x)
非負整数 x が与えられた場合、x の平方根を 小数点以下を切り捨てた最も近い整数 として返してください。返される整数も 非負 でなければなりません。
組み込みの累乗関数や演算子を使用してはいけません。
例えば、C++ では pow(x, 0.5) を、Python では x ** 0.5 を 使用しないでください。
例 1:
入力:
x = 4
出力:
2
説明:
4 の平方根は 2 なので、2 を返します。
例 2:
入力:
x = 8
出力:
2
説明:
8 の平方根は 2.82842... ですが、小数点以下を切り捨てる ため 2 を返します。
二分探索を使った平方根の求め方
-
範囲を決める
-
left = 0、right = xで初期化。 - ただし
xが1以下ならそのまま返す。
-
-
二分探索の実行
-
mid = (left + right) // 2を計算。 -
mid^2がxなら、そのままmidを返す。 -
mid^2 > xの場合、right = mid - 1で小さい値を探索。 -
mid^2 < xの場合、left = mid + 1で大きい値を探索。
-
-
最終的に
rightを返す-
rightはmid^2がxを超えない最大の値になる。
-
Discussion