题目描述
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.
思路
- 遍历到 n/2 判断
- 二分
代码
class Solution {
public:
int mySqrt(int x) {
if (x == 0) return 0;
int ans;
for (long long i=1; i<=x/2; ++i) {
if (i*i <= x && (i+1)*(i+1) > x) {
ans = i;
break;
}
}
return ans;
}
};
- 二分
class Solution {
public:
int mySqrt(int x) {
if (x <= 1) return x;
int l = 1;
int r = x/2+1;
while(l < r) {
long long mid = l + (r - l) / 2;
if (x / mid >= mid) l = mid+1;
else r = mid;
}
return l-1;
}
};