This is a binary search problem, but it's very easy to get the wrong answer...
Here is the code I wrote for leetcode testing. There still long way to go to understand this 100%...
public class Solution {
public int sqrt(int x) {
if(x ==0 || x== 1) return x;
if(x < 0) return -1;
long start = 0;
long end = x;
while(end-start >= 0){
long mid = start + (end - start)/2;
long midsqr = mid * mid;
if(midsqr == x)
return (int)mid;
else if(midsqr < x){
start = mid+1;
}
else if(midsqr > x){
end = mid - 1;
}
}
return (int) end;
}
}