69. x的平方根

思路:

这题我只会二分,牛顿迭代法不适合我这种数学弱鸡。

还是那句话,为什么可以用二分? 因为答案是有序的。

 

代码:

复制代码
 1 /**
 2      * @param {number} x
 3      * @return {number}
 4      */
 5     var mySqrt = function(x) {
 6         let left = 0, right = x, mid;
 7         while(left <= right){
 8             mid = (left + right) >> 1;
 9             if(mid ** 2 === x){
10                 return mid;
11             }else if(mid ** 2 < x){
12                 left = mid + 1;
13             }else{
14                 right = mid - 1;
15             }
16         }
17         return right;
18     };
复制代码

 

 

当然,也可以设置一个比较小的right值来提速。但基本没有性能提升。为啥加1?因为要处理1这种特殊情况。

复制代码
 1 var mySqrt = function(x) {
 2         let left = 0, right = (x>>1) + 1, mid;
 3         while(left <= right){
 4             mid = (left + right) >> 1;
 5             if(mid ** 2 === x){
 6                 return mid;
 7             }else if(mid ** 2 < x){
 8                 left = mid + 1;
 9             }else{
10                 right = mid - 1;
11             }
12         }
13         return right;
14     };
复制代码

 

posted @   BJFU-VTH  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示