69. Sqrt(x)
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.
solution 1 :binary search
题目本身很简单。主要的问题是要注意可能的overflow
public int mySqrt(int x) {
if (x < 2) {
return x;
}
int lo = 1;
int hi = x / 2;
while (lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
long tmp = (long) mid * mid;
if (tmp == x) {
return mid;
} else if (tmp < x) {
lo = mid;
} else if (tmp > x) {
hi = mid;
}
}
long t = (long) hi * hi;
if (t <= x) {
return hi;
} else {
return lo;
}
}
代码中的 m i d ∗ m i d mid * mid mid∗mid 和 h i ∗ h i hi * hi hi∗hi 全部用 long 的类型存储,因为如果用 int 型,会出现overflow。