Leetcode 69:x的平方根

题目描述:

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4
输出:2
示例 2:
输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

思路:
看到数组并且有序的时候,进行查找操作可以使用二分查找。
一个数 x 的开方 sqrt 一定在 0 ~ x 之间,并且满足 sqrt == x / sqrt。可以利用二分查找在 0 ~ x 之间查找 sqrt。
二分查找最重要的是定区间,[left,right],有点类似头尾的双指针。
由于循环结束条件是left<=right,所以循环结束的时候left=right+1,所以最后返回的值应该是较小的right

代码:

class Solution {
    public int mySqrt(int x) {
        int left=1,right=x;
        //闭区间
        while(left<=right){
            int mid=left+(right-left)/2;
            int temp=x/mid;
            if(temp<mid){
                right=mid-1;
            }else if(temp>mid){
                left=mid+1;
            }else if(temp==mid){
                return mid;
            }
        }
        return right;
    }
}

PS:
二分查找mid的确定:
由于(left+right)/2的加法运算可能导致溢出,因此通常使用mid=left+(right-left)/2。
二分查找也称为折半查找,每次都能将查找区间减半,这种折半特性的算法时间复杂度为 O(logN)。

posted @   Dreamer_szy  阅读(94)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示