【二分查找】LeetCode 69. x 的平方根

题目链接

69. x 的平方根

思路

基本思路是在区间 \([1, x/2]\) 中使用二分查找(因为平方根必然小于 \(x/2\)),只不过需要注意一些细节。

  1. 因为使用的是闭区间查找,所以判断循环终止的条件为 \(left \leq right\)
  2. 为了防止溢出,使用 mid = (right - left) / 2 + leftmid == x / mid 进行运算与判断。
  3. 同样是因为闭区间查找,所以在 \(mid\) 已经判断过的情况下,变换左右边界应该跳过 \(mid\),所以变换为 \(left = mid + 1\)\(right = mid - 1\)
  4. 因为终止条件为 \(left \leq right\),所以在跳出循环的时候必然有 \(right < left\),所以要返回的是 \(right\)

代码

class Solution {
    public int mySqrt(int x) {
        if(x == 0){
            return 0;
        }
        if(x == 1){
            return 1;
        }

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

        return right;
    }
}
posted @   Frodo1124  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示