class Solution {
public int mySqrt(int x) {
long left = 0;
long right = x / 2;
while (left <= right) {
long mid = left + (right - left) / 2;
long sqr = mid * mid;
long nextSqr = (mid + 1) * (mid + 1);
if (sqr == x || (sqr < x && nextSqr > x)) {
return (int) mid;
} else if (sqr < x) {
left = mid + 1;
} else if (sqr > x) {
right = mid - 1;
}
}
return x;
}
}