leetcode 69 求x平方根(0-1问题 找到first1 和 last 0)

该文章介绍了如何使用二分查找算法来寻找数字x的平方根。在处理可能引发溢出的问题时,通过比较mid的平方与x的关系来逐步缩小搜索范围,最后找到满足条件的最接近的整数平方根。代码分别用JavaScript和Python实现。
摘要由CSDN通过智能技术生成

比如 8
可以看为一个升序的数组
12345678
找m*m<=x 最后一个m

注意!! m*m<=x 要是很大,可能会溢出,所以判断的时候取 mid<=x/mid;

(mid+1)>x/(mid+1)

易错!!一:是> 不是>=
二:x/(mid+1) 要加括号!!!

/**
 * @param {number} x
 * @return {number}
 */
var mySqrt = function(x) {  //这里的临界值为0
    if(x==0){
        return 0;
    }
    //把它当一个数组,x从1到x大小分别作为它的left和right
    let left=1;
    let right=x;
    while(left<=right){
    let  mid=Math.floor(left+(right-left)/2);
        if(mid<=x/mid){
            if((mid+1)>x/(mid+1)){   
                //!!易错点!!! 第一次这里x/(mid+1) 没有加括号,使计算错误
                 return mid;
            }
           else{
             left=mid+1;
            }
        }
        else{
           right=mid-1; 
        }
        
    }
    return -1;
};

python版本:

def mySqrt(x: int) -> int:
    if x == 0:
        return 0
    left = 1
    right = x
    while left <= right:
        mid = left + (right - left) // 2
        if mid <= x // mid:
            if mid + 1 > x // (mid + 1):
                return mid
            else:
                left = mid + 1
        else:
            right = mid - 1
    return -1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值