求x 的平方根
-
题目:
实现 int sqrt(int x) 函数。实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 -
思路:
因为x是非负整数,那么当x是0的时候平方根为0,x为1时平方根为1,只有当x大于1时才需要计算因为x是非负整数,那么当x是0的时候平方根为0,x为1时平方根为1,只有当x大于1时才需要计算。
计算采用二分查找来做,因为当x>1时,x的平方根y肯定在1到x之间即1<y<x,知道了数值的范围直接使用二分查找在该范围内查找平方根即可。
这里说一下二分查找的时间复杂度为O(logn),是一种非常高效的查找方式。
3.代码
class Solution {
public int mySqrt(int x) {
//返回结果只要整数,小于1的平方根都是0.多,舍弃后为0
if (x==0 || x==1)
{
return x;
}
int left=1;
int high=x;
int mid=0;
while (left<=high)
{
mid=left+((high-left)>>1);
//这里不要用平方积,当mid过大会越界,所以用除更好
if (mid==x/mid)
{
return mid;
}else if (mid<x/mid)
{
left=mid+1;
}else {
high=mid-1;
}
}
return high;
}
}