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

LeetCode二分查找:x 的平方根

LeetCode二分查找:x 的平方根

题目描述

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

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

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

示例 1:

输入:x = 4
输出:2

示例 2:

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

解题思路

经典写法:

用二分查找的思想,通过不断缩小搜索范围,最终找到平方根的整数部分。

为什么采用long而不是int

因为再计算r时可能出现溢出

需要注意得一点是:在计算 mid 时使用 left+(right-left) / 2,而不是 (left + right) / 2。这样可以避免溢出。

代码

class Solution {
    public int mySqrt(int x) {
        long high = x / 2;
        long low = 0;

        if (x == 1) {
            return 1;
        }

        while (low <= high) {
            long mid = low + (high - low) / 2;
            long r = mid * mid;

            if (r > x) {
                high = mid - 1;
            } else if (r < x) {
                low = mid + 1;
            } else {
                return (int) mid;
            }
        }

        // 返回 low - 1 而不是 low
        return (int) (low - 1);
    }
}

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

相关文章:

  • 使用 Keras 训练一个卷积神经网络(CNN)(入门篇)
  • neo4j desktop基本入门
  • 爱普生SG-8200CJ可编程晶振在通信设备中的应用
  • 【真题笔记】21年系统架构设计师案例理论点总结
  • 【金融风控】特征评估与筛选详解
  • XSS安全基础
  • 什么是npm?能干什么?
  • 不得不说,HelpLook真的是一个很懂用户的文档管理工具
  • Uniapp
  • 调优--学习笔记
  • SCA技术进阶系列(四):DSDX SBOM供应链安全应用实践
  • 组合总和II(回溯、去重)
  • ROS报错:RLException:Invalid roslaunch XML Syntax: mismatched tag:
  • MFC 绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线.
  • 【web安全】CSRF漏洞攻击与防御
  • 从零开始:PHP实现阿里云直播的简单方法!
  • Java通过Redis进行延时队列,定时发布消息(根据用户选择时间进行发布)
  • python爬虫抓取网页图片教程
  • Spring事务管理介绍
  • yolo.txt格式与voc格式互转,超详细易上手
  • Centos图形化界面封装OpenStack Ubuntu镜像
  • Electron+Ts+Vue+Vite桌面应用系列:TypeScript常用时间处理工具
  • Python ctypes:揭秘高级Python与底层交互秘籍
  • JavaScript编程基础 – For循环
  • ChatGPT等大语言模型为什么没有智能
  • JavaWeb | 表单开发