## Challenge Description

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.

## Approach with binary search

With binary search, the `left`

pivot will be the integer value of sqrt. Remember don’t write the code like, this will trigger overflow for some inputs:

```
if(mid * mid == x)
.....
```

Time complexity: \(O(log(x))\).

```
class Solution {
public:
int mySqrt(int x) {
int left = 0;
int right = x;
if(x <= 1) return x;
while(left < right-1) {
int mid = left + (right - left) / 2;
if(mid == x/mid)
return mid;
else if(x/mid < mid)
right = mid;
else
left = mid;
}
return left;
}
};
```

## Approach with newton methods

Newtons’ method is a clever method for computing the sqrt value, and we use `double`

type for the accuracy.

```
#include <math.h>
class Solution {
public:
int mySqrt(int x) {
double val = (double)x;
if(x <= 1) return x; //corner case
while(true) {
double last = val;
val = (val + (double)x/val) * 0.5;
if(abs(val - last) < 1e-9)
break;
}
return (int)val;
}
};
```