题目链接
分析:
要查找一个数字Target的平方根,很容易会想到 二分查找
另外,有两点需要注意:
1. 你所要找到的数字(也就是平方根)不能大于给出的数字Target
2. 查找的范围应是:1 ~ Integer.MAX_VALUE
在二分查找完,比如说给出的Target的是 90
那么你最后找到的两个数字start应该是 9,end应该是10
牵扯到一个取值的问题,当然是要取 9 就是要满足上面写的第二点的意思
代码实现
public class Solution {
// 解法一: 二分查找思想
public int mySqrt(int n) {
if (n <= 0)
return 0;
int magicNum = (int)Math.sqrt(Integer.MAX_VALUE);
int start = 1, end = magicNum;
while (start+1 < end) {
int mid = start + (end-start) / 2;
if (mid * mid == n)
return mid;
if (mid * mid > n)
end = mid;
else start = mid;
}
if (end * end <= n)
return end;
else return start;
}
}