Example: SQRT - rFronteddu/general_wiki GitHub Wiki

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.

class Solution {
    public int mySqrt(int x) {
        // 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.
        if (x == 1) {
            return 1;
        }
        
        int start = 0;
        int end = x;
        
        while (start <= end) {
            int mid = start +  (end - start) / 2;
            // protect from overflow
            long square = (long) mid * mid;
            
            if (square == x) {
                return mid;
            } else if (square < x) {
                start = mid + 1;
            } else {
                end = mid - 1;
            }
        }
        
        // Since we are rounding down, return end
        return end;
    }
}