69. Sqrt(x)
🟩 Easy
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.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.
Constraints
0 <= x <= 2^31 - 1
Hint-1
Try exploring all integers. (Credits: @annujoshi)
Hint-2
Use the sorted property of integers to reduced the search space. (Credits: @annujoshi)
Solution
My Solution
Optimal Solution (Binary Search)
Approach
This solution uses binary search to efficiently find the square root:
Initial Range:
For x ≥ 2, square root is in range [1, x/2]
For x < 2, return x directly
Using x/2 as upper bound since √x ≤ x/2 for x ≥ 4
Binary Search Implementation:
Calculate mid point and its square
If square equals x, found exact square root
If square less than x, search right half
If square greater than x, search left half
Key Insights:
Integer overflow avoided using (right-left)/2
Result is floor of actual square root
Right pointer ends at floor value
Complexity Analysis
Time Complexity: O(log n)
Binary search over range [1, x/2]
Search space halved in each iteration
Takes logâ‚‚(x) steps to converge
Space Complexity: O(1)
Only uses constant extra space:
Three integers (left, right, mid)
One temporary for square calculation
Why it works
Binary Search Properties:
Search space is sorted (1 to x/2)
Can compare mid² with target
Always converges to floor value
Handling Edge Cases:
x < 2 handled separately
Overflow prevented in mid calculation
Right pointer gives floor value when no exact square
Correctness:
If exact square root exists, found directly
If not, right pointer gives floor value
All values in [1, x/2] considered
Last updated
Was this helpful?