地址 https://leetcode-cn.com/problems/sqrtx/
实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
解法
使用二分搜索逐个尝试。
这里推荐一个二分模板的好文章 https://www.acwing.com/blog/content/31/
代码如下
class Solution { public: int mySqrt(int x) { int l = 0; int r =x; while(l < r){ int mid = (l+r+1ll) >>1; if(mid < x/mid) l = mid; else if(mid == x/mid) return mid; else{ r = mid-1; } } return l; } };