最新的国际新闻seo关键词外包
x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
作者:LeetCode
链接:https://leetcode.cn/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 boundif (mid <= x/mid){i = mid +1;ans = mid; // 只要mid <= x/mid,left左边界就会一直向右移动,ans就会一直更新(变大),直到不在满足mid <= x/mid的条件为止,ans就会停止更新,永远停在满足mid<=x/mid条件下面的最后一次更新,即满足ans * ans <= mid的最大值。}elsej = 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;elseleft = mid + 1;}return right;}
}作者:Ebisu
链接:https://leetcode.cn/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;}