Implement int sqrt(int x).
Compute and return the square root of x.
x is guaranteed to be a non-negative integer.
Example 1:
Input: 4
Output: 2
Example 2:
Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated.
这个题直接遍历就太low了,我能直接想到的也只要有二分法了。
public int mySqrt(int x) {
if(x <= 1) return x;
int low = 0;
int high = x;
int mid = x / 2;
while (true) {
long result = x / mid;
if(result == mid) return mid;
//结果大于x
if (result > mid) {
if(x / (mid + 1) < mid + 1) return mid;
if(x / (mid + 1) == mid + 1) return mid + 1;
low = mid;
}
//结果小于x
if (result < mid) {
if(x / (mid - 1) >= mid - 1 ) return mid - 1;
high = mid;
}
mid = (low + high) / 2;
}
}
想要进一步提升运行效率就只有用位运算了