当前位置: 首页 > article >正文

x的算术平方根( 二分查找)

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

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

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

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

class Solution {
public:
    int mySqrt(int x) {
        if (x < 2) return x; // 0 和 1 的平方根是它们本身
     int left = 2, right = x / 2; // 设置二分查找的边界
        while (left <= right) {
            int mid = left + (right - left) / 2; // 防止溢出
            long long square = (long long)mid * mid; // 计算 mid 的平方

            if (square == x) {
                return mid; // 找到平方根
            } else if (square < x) {
                left = mid + 1; // 调整左边界
            } else {
                right = mid - 1; // 调整右边界
            }
        }
        
        return right; // 当循环结束,right 是结果的整数部分
    }
};

 

lr 都非常接近 INT_MAX 时, l + r 会导致整数溢出,从而得到错误的 mid 值。所以用l + (r - l) / 2代替(l + r) / 2。但是long long mid = (l + r) / 2 能够避免溢出的问题

换一种写法,算法还是一样:

class Solution {
public:
    int mySqrt(int x) {
        int l=0,r=x;
        while(l<=r){
            long long mid=(l+r)/2;
            if(mid*mid==x) return mid;
            else if(mid*mid>x) r=mid-1;
            else l=mid+1;
        }
        return r;
    }
};


http://www.kler.cn/a/403189.html

相关文章:

  • 136.flask内置jinja2模版使用
  • Easyexcel(4-模板文件)
  • STM32F103 GPIO和串口实战
  • json-bigint处理前端精度丢失问题
  • 掌握移动端性能测试利器:深入JMeter手机录制功能
  • 「Mac玩转仓颉内测版26」基础篇6 - 字符类型详解
  • SQL Server Management Studio 的JDBC驱动程序和IDEA 连接
  • 跨平台WPF框架Avalonia教程 十二
  • 关于安卓模拟器或手机设置了BurpSuite代理和安装证书后仍然抓取不到APP数据包的解决办法
  • 基于gradio+networkx库对图结构进行可视化展示
  • TypeScript 与 JavaScript 的主要区别及使用场景
  • [大数据] Iceberg
  • Spark RDD中的迭代器
  • 机器学习笔记 // 创建窗口数据集
  • 什么是 C++ 中的初始化列表?它的作用是什么? 初始化列表和在构造函数体内赋值有什么区别?
  • LLM学习笔记(2)会话补全Chat Completions、什么是JSON?
  • Leetcode661:图片平滑器 C语言
  • 详解Rust结构体struct用法
  • 【C语言】C语言代码的编写规范、注释规范
  • 数据结构的两大要素
  • 【监控】如何打开笔记本的电脑调出摄像头将画面保存下来
  • 华为Ensp模拟器配置OSPF路由协议
  • AI 一键生成 POD 素材:手绘风格圣诞元素印花图案分享
  • 春意盎然:基于Spring Boot的中药实验管理平台
  • 1. 使用Python和TensorFlow进行深度学习入门教程,学习如何搭建神经网络并训练模型。
  • 基于Vue+SpringBoot的求职招聘平台