题目
【开平方】
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.
思路
二分查找法
代码
class Solution{
public int mySqrt(int x) {
if (x == 0)
return 0;
int left = 1, right = Integer.MAX_VALUE;
while (true) {
int mid = left + (right - left)/2;
if (mid > x/mid) //mid^2 > x
{
right = mid - 1;//在左半部分查找
}
else { //mid^2 <= x
if (mid + 1 > x/(mid + 1))//符合要求
return mid;
left = mid + 1;//否则继续在右半部分查找
}
}
}
}
提交结果
Runtime: 2 ms, faster than 74.64% of Java online submissions for Sqrt(x).
Memory Usage: 32.4 MB, less than 100.00% of Java online submissions for Sqrt(x).