Related Topics: Binary Search,Math
这里的数学法是使用牛顿迭代法,这里使用二分法查找
class Solution {
public:
int mySqrt(int x) {
if (0 == x || 1==x) return x;
int low = 1, high = x, ans;
while (low <= high) {
int mid = low + (high - low) / 2;
if (mid <= x /mid ) {
low = mid + 1;
ans = mid;
} else {
high = mid - 1;
}
}
return ans;
}
};
在if (mid <= x /mid ) 中,一开始使用的是mid*mid<=x就报错,mid<=x/mid就是对的,可能使用mid*mid<=x还需要判断(mid+1)*(mid+1)>x,这样的话又会超时。