69. Sqrt(x)

Implement int sqrt(int x).

Compute and return the square root of x, where x is guaranteed to be a non-negative integer.

Since the return type is an integer, the decimal digits are truncated and only the integer part of the
result is returned.

Example 1:

Input: 4
Output: 2

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since
             the decimal part is truncated, 2 is returned.
  • Binary search

public int mySqrt(int n) {
    int l = 0, r = n;
    while(l + 1 < r) {
        int mid = l + (r-l) / 2;
        long square = (long)mid * mid;
        if(square == n) return mid;
        else if(square < n) l = mid;
        else r = mid;
    }
    return (long)r * r <= n ? r : l;
}

  • Optimized Brutal Force: Reduce search Space
public int mySqrt(int n) {
    long x = n;
    long y = x;
    while(x/2 * x/2 > y) {
        x /= 2;
    }
    for(long i = x / 2; i <= x; i++) {
        long j = i * i;
        if(j == y) return (int)i;
        else if(j > y) return (int)i-1;
    }
    return -1;
}