二分专题:69. x 的平方根

109 阅读1分钟

704. 二分查找

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

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

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

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 具体题目链接: 题目链接
示例 1:

输入: x = 4
输出: 2

思路:

1.思路:二分题目的思路:

确定二分边界(重点!!)
编写二分的代码框架(2个模版之一)
设计一个check(性质)
判断一下区间如何更新
如果更新方式写的是l=mid,r=mid-1,那么就在算mid的时候加上1

  • 这道题要求我们实现平方根函数,输入是一个非负整数,输出也是一个整数;
  • 但是题目当中说:结果只保留整数的部分,小数部分将被舍去
  • 平方以后一定不会严格大于 输入的整数x 也就是target。
  • mid > x/mid;这部分区间要舍去
  • 我们要找的是mid平方以后 小于等于 xx 的最大正整数 a,也就是mid ≤x/mid 才满足性质条件

细节:

边界条件0 和 1 除外,需要单独处理一下

代码:

var mySqrt = function(x) {
    if(x==0)return 0;//判断初始的条件
    if(x==1)return 1;

    let left = 1;
    let right = x;//左右端点的选择
    while(left<right) {  
        let mid = left+ ((right-left)+1>>1);
        if(mid <= x/mid) {
            left = mid;
        } else {
            right = mid-1;
        }
    }
    return left;
};

总结:

这是算法系类文章「二分专题」的相关题解