Sqrt(x)
description
Given a non-negative integer x, return the square root of x rounded down to the nearest integer. The returned integer should be non-negative as well.
You must not use any built-in exponent function or operator.
- For example, do not use
pow(x, 0.5)in c++ orx ** 0.5in python.
Example 1:
Input: x = 4 Output: 2 Explanation: The square root of 4 is 2, so we return 2.
Example 2:
Input: x = 8 Output: 2 Explanation: The square root of 8 is 2.82842..., and since we round it down to the nearest integer, 2 is returned.
Constraints:
0 <= x <= 231 - 1
submission
// binary search, we search the first number l that
// (l + 1) * (l + 1) > x
// then the answer is l
impl Solution {
pub fn my_sqrt(x: i32) -> i32 {
let (mut l, mut r) = (0, x);
while l < r {
// +1 here
let mid = l + (r - l) / 2 + 1;
// simple trick to avoid i64
if mid <= x / mid {
l = mid;
} else {
r = mid - 1;
}
}
l
}
}