1)题目
搜索插入位置
要求:
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
样例:
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842…,
由于返回类型是整数,小数部分将被舍去。
2)思路
二分法 找mid,计算mid的平方与x的大小,然后判断,不断缩小范围,若没找到正好的mid(mid*mid=x),则返回小的数
3)代码
二分查找:
class Solution {
public:
int mySqrt(int x)
{
long long i=0;
long long j=x/2+1;
while(i<=j)
{
long long mid=(i+j)/2;
long long res=mid*mid;
if(res==x)
{
return mid;
}
if(res<x)
{
i=mid+1;
}else
{
j=mid-1;
}
}
return j;//return j 意思是while循环没有找到mid,此时i>j,取小的
}
};