LeetCode69x的平方根-----二分法

题目表述

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

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

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

示例:

输入:x = 4

输出:2

二分法

二分查找的下界为 00,上界可以定为X/2+1。在二分查找的每一步中,我们只需要比较中间元素mid 的平方与 x 的大小关系,并通过比较的结果调整上下界的范围。由于我们所有的运算都是整数运算,不会存在误差,最后当right和left相等时,在判断一次即可返回right,为什么不是返回left? 因此最终left > right,需要返回平方根的整数部分,x的平方根大小是在right-left之间的,所以返回right即可。

class Solution {
    public int mySqrt(int x) {
        int left = 0;
        int right = x / 2 + 1;
        while(left <= right){
            int mid = left + (right - left) / 2;
            if((long)mid * mid == x){
                return mid;
            }else if((long) mid * mid > x){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }
        return right;
    }
}
posted @ 2022-04-18 13:06  YoungerWb  阅读(33)  评论(0编辑  收藏  举报