leetcode69--x的平方根

方法一

直接进行简单的循环遍历,找到符合条件的值返回结果即可

java 复制代码
class Solution {
    public int mySqrt(int x) {
        for (int i = 0; i <= x; i++) {
            if ((long)i * i <= x && (long)(i + 1) * (i + 1) > x) {
                return i;
            }
        }
        return -1; // 这个返回值实际上不会被触发,因为对于所有正整数 x,总会找到一个 i
    }
}

二分查找法

java 复制代码
class Solution {
    public int mySqrt(int x) {
        int left=0,right=x,res=-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if((long)mid*mid<=x){
                res=mid;
                left=mid+1;
            }else{
                right=mid-1;
            }
        }
        return res;
    }
}

详细解析

  1. 初始化变量

    • left 初始化为 0,表示搜索区间的左边界。
    • right 初始化为 x,表示搜索区间的右边界。
    • res 初始化为 -1,用于存储最终的结果。
  2. 二分查找循环

    • 使用 while (left <= right) 循环,直到 left 超过 right 为止。

    • 在每次迭代中,计算中间值 mid

      java 复制代码
      int mid = left + (right - left) / 2;

      这种计算方式是为了防止 (left + right) / 2 可能导致的整数溢出问题。

  3. 检查中间值

    • 计算 mid * mid 并与 x 进行比较。为了避免整数溢出,将 mid * mid 转换为 long 类型:

      java 复制代码
      if ((long)mid * mid <= x) {
          res = mid;
          left = mid + 1;
      } else {
          right = mid - 1;
      }
    • 如果 mid * mid 小于或等于 x,说明 mid 是一个可能的解,更新 resmid,并将 left 移动到 mid + 1,继续在右半部分查找更大的可能解。

    • 如果 mid * mid 大于 x,说明 mid 太大了,需要在左半部分查找更小的解,因此将 right 移动到 mid - 1

  4. 返回结果

    • left 超过 right 时,循环结束,此时 res 存储的就是 x 的平方根(向下取整)。
相关推荐
何政@2 分钟前
如何快速自定义一个Spring Boot Starter!!
java·spring boot·spring·自定义配置·springboot自动配置·快速构建一个starter·
nick98768 分钟前
信号处理之中值滤波
人工智能·算法·信号处理
Web项目开发21 分钟前
JAVA JDK华为云镜像下载,速度很快
java
宇宙超粒终端控制中心24 分钟前
leetcode34. 在排序数组中查找元素的第一个和最后一个位置
算法·leetcode·二分查找
夜色呦24 分钟前
利用Spring Boot构建足球青训管理平台
java·spring boot·后端
计算机专业源码25 分钟前
springboot儿童物品共享平台的设计与实现
java·spring boot·后端
尘浮生25 分钟前
Java项目实战II基于Java+Spring Boot+MySQL的购物推荐网站的设计与实现(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·maven·intellij-idea
2402_8575893629 分钟前
Spring Boot框架下的足球青训俱乐部后台开发
java·spring boot·后端
2401_8576363930 分钟前
足球青训后台管理系统:Spring Boot实现指南
java·spring boot·后端
杨哥带你写代码32 分钟前
Spring Boot技术在足球青训管理中的实践与挑战
java·spring boot·后端