Sqrt(x) LeetCode

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++ or x ** 0.5 in 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.



class Solution {
    public int mySqrt(int x) {
        // Base cases: if x is 0 or 1, square root is the number itself
        if (x == 0 || x == 1) return x;
       
        int start = 1;      // Minimum possible square root
        int end = x;        // Maximum possible square root
        int ans = 1;        // Variable to store the final answer

        // Binary search to find the integer square root
        while (start <= end) {
            int mid = start + (end - start) / 2;

            // Convert mid to long to prevent integer overflow when squaring
            long square = (long) mid * mid;

            // If mid*mid == x, we found the exact square root
            if (square == x) {
                return mid;
            }
            // If square is less than x, move to right half
            else if (square < x) {
                ans = mid;         // Store current mid as possible answer
                start = mid + 1;   // Try for a bigger number
            }
            // If square is greater than x, move to left half
            else {
                end = mid - 1;     // Try for a smaller number
            }
        }

        // Return the integer part of the square root
        return ans;
    }
}

 

Comments

Popular posts from this blog

Two Sum II - Input Array Is Sorted

Comparable Vs. Comparator in Java

Increasing Triplet Subsequence