69. Sqrt(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.
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.
Constraints:
- 0 < = x < = 2 31 − 1 0 <= x <= 2^{31} - 1 0<=x<=231−1
From: LeetCode
Link: 69. Sqrt(x)
Solution:
Ideas:
- We first handle the special case of x being 0.
- We define left and right to represent the range of possible square root values.
- Inside the while loop, we calculate the mid of the range.
- We compare mid * mid with x. To avoid integer overflow, we use mid <= x / mid.
- If mid * mid is less than or equal to x, we update left and ans.
- If mid * mid is greater than x, we adjust right.
- When the loop finishes, ans contains the floor of the square root of x.
Code:
c
int mySqrt(int x) {
if (x == 0) return 0;
int left = 1, right = x, ans;
while (left <= right) {
int mid = left + (right - left) / 2;
if (mid <= x / mid) { // To avoid overflow
left = mid + 1;
ans = mid;
} else {
right = mid - 1;
}
}
return ans;
}