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 @ 2022-04-07 11:48  BJFU-VTH  阅读(26)  评论(0编辑  收藏  举报