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

【二分算法】-- x的平⽅根(easy)

文章目录

  • 1. 题目
  • 2. 题目解析
  • 3. 代码

1. 题目

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

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

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

示例 1:
输入:x = 4
输出:2

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

提示:

0 <= x <= 231 - 1

2. 题目解析

我们假设ret那个位置就是我们要返回的结果。
在这里插入图片描述
此时,我们就可以将其分成两个区间,左边是平方后<=x的,右边是平方后<x的。这就是这道题中的二段性

在这里插入图片描述

  1. mid * mid <= x:left = mid
  2. mid * mid > x :right = mid - 1

3. 代码

/**
     * 由于数据比较大,在计算mid * mid时,
     * 有可能会出现溢出的情况,所以要将数据类型修改成long类型
     * @param x
     * @return
     */
    public int mySqrt(int x) {
       //由于x 可能是小于1的,所以那么[1,x]这个区间可能会不存在
       //所以进行单独处理
        if (x < 1){
            return 0;
        }
        long left =1;
        long right = x;
        while (left < right){
            long mid = left + (right - left + 1) / 2;
            if (mid * mid <= x){
                left = mid;
            }else{
                right = mid - 1;
            }
        }
        return (int) left;
    }

相关文章:

  • @ComponentScan和@SpringBootApplication的scanBasePackages 同时使用
  • 面试模拟舱Pro:AI赋能的求职训练革命
  • DICOM Query/Retrieve(QR)详解与实现
  • 【Java】反射与动态代理篇
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_03可调整列宽的固定表头表格
  • 机器学习与深度学习算法及工具在图像分类中的应用总结
  • 移动Android和IOS自动化中常见问题
  • NPM安装与配置全流程详解(2025最新版)
  • Nginx的流式响应配置详解
  • 【每日学点HarmonyOS Next知识】状态变量、动画UI残留、Tab控件显示、ob前缀问题、文字背景拉伸
  • 【网络编程】HTTP网络编程
  • 前后端+数据库的项目实战--学生信息管理系统-易
  • Cesium 入门教程(基于 vue3)
  • Linux学习(十五)(故障排除(ICMP,Ping,Traceroute,网络统计,数据包分析))
  • 如何查看redis的缓存时间
  • js 使用 Web Workers 来实现一个精确的倒计时,即使ios手机锁屏或页面进入后台,倒计时也不会暂停。
  • 每天一篇《目标检测》文献(二)
  • Java线程详解
  • 【Linux】线程控制
  • 第四章:深入理解框架之 GUI 模块
  • 上海市税务局:收到对刘某某存在涉税问题的举报,正依法依规办理
  • 泽连斯基与埃尔多安会面,称已决定派遣代表团前往伊斯坦布尔
  • 证券时报:中美互降关税落地,订单集中补发港口将迎高峰期
  • 外交部:各方应为俄乌双方恢复直接对话创造条件
  • 袁思达已任中国科学院办公厅主任
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟