二分搜索-x 的平方根

45 阅读1分钟

69. x 的平方根

描述

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

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

注意: 不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

分析

   求目标x的平方根m,使得 m * m = x ,此时可以在 (1,x/2)的区间上使用二分搜索查找m。

   边界条件处理:当目标x为0和1,直接返回x即可。

解法

计算mid,使用while进行二分搜索

  • 若过程中找到了m,直接返回即可
  • 若循环结束也没找到,说明m是浮点数,需要返回向下取整的值。

提问:向下取值的值该怎么去取?
解答:只需要思考一下最后退出循环前的情况(left==right==mid) 。若mid * mid < x, 则left=mid+1,此时right就是向下取值的值。若 mid * mid > x,则right = mid -1, 此时right依然是向下取值的值。所以最后返回right即可。

代码

    public int mySqrt(int x) {
        if(x<=1){
            return x;
        }
        int left=1;
        int right=x/2;
        int mid;
        while(left<=right){
            mid=(left+right)/2;
            if(mid==(x/mid)){
                return mid;
            }else if(mid<(x/mid)){
                left=mid+1;
            }else{
                right=mid-1;
            }
        }

        return right;
    }

总结

通过三道二分搜索例题,给出了二分搜索的代码思路。

(二分搜索-在排序数组中查找元素的第一个和最后一个位置 - 掘金 (juejin.cn))

(二分搜索-搜索插入位置 - 掘金 (juejin.cn))