- 难度:
中等
- 本题涉及算法:
二分查找
- 思路:
二分查找
- 类似题型:
题目 69. x 的平方根
实现 int sqrt(int x)
函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
示例
示例 1:
输入: 4
输出: 2
示例 2:
输入: 8
输出: 2
说明: 8 的平方根是 2.82842...,
由于返回类型是整数,小数部分将被舍去。
解题思路
查找或者搜索型的题目,很自然的会往 二叉树
DFS
BFS
等上面套
几个坑点
- 对于输入参数的判断,可以先处理
- right 不能随便+1,有可能溢出 int 或者 long的长度
- 平方需要用的结果需要转long,防止溢出 int
代码
class Solution {
public int mySqrt(int x) {
if (x<2)
return x;
int left = 0;
// x 一定大于 x/2
int right = x/2+1;
while (left<right) {
// 这个是需要注意的点,平放有可能会超出int范围
int mid = left+(right-left)/2;
long num = (long)mid * mid;
if (num==x)
return mid;
if (num>x)
right=mid;
else
left=mid+1;
}
return left-1;
}
}
PREVIOUS81. 搜索旋转排序数组 II
NEXT56. 合并区间