题目:实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
(来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx)
思路:利用基本不等式可得,√a≤a/2,所以,可以利用二分查找的思想解决。
下面是代码:
int mySqrt(int x)
{
int left=2,right=x/2;
long temp;//防止超过int类型的上限,用long
if(x<2)
return x;
else
{
while(left<=right)
{
temp=left+(right-left)/2;//范围的中间值
if(temp*temp>x)
right=temp-1;//此数的平方根在中间值左端,右端点左移
else if(temp*temp<x)
left=temp+1;//此数的平方根在中间值右端,左端点右移
else if(temp*temp==x)
return temp;
}
return right;
}
}