主页 > 开源代码  > 

x的平方根

x的平方根

x 的平方根 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

作者:LeetCode 链接: leetcode /leetbook/read/binary-search/xe9cog/ 来源:力扣(LeetCode)  

class Solution { public int mySqrt(int x) { int i = 1; int j = x; int ans = 0; while (i <=j){ int mid = i + (j-i)/2; // upper bound的形式,因为我们要找的ans要是最接近于x的最大的数,利用upper bound if (mid <= x/mid){ i = mid +1; ans = mid; // 只要mid <= x/mid,left左边界就会一直向右移动,ans就会一直更新(变大),直到不在满足mid <= x/mid的条件为止,ans就会停止更新,永远停在满足mid<=x/mid条件下面的最后一次更新,即满足ans * ans <= mid的最大值。 } else j = mid-1; } return ans; } } class Solution { public int mySqrt(int x) { if(x < 2) return x; int left = 1, right = x; while(left <= right){ int mid = (left + right) >>> 1; if(x / mid == mid) return mid; else if(x / mid < mid) right = mid - 1; else left = mid + 1; } return right; } } 作者:Ebisu 链接: leetcode /leetbook/read/binary-search/xe9cog/?discussion=oeKufZ 来源:力扣(LeetCode) class Solution { public: int mySqrt(int x) { int l = 0, r = x, ans = -1; while (l <= r) { int mid = l + (r - l) / 2; if ((long long)mid * mid >= x) { ans = mid; r = mid - 1; } else { l = mid + 1; } } return ans; }

标签:

x的平方根由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“x的平方根