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

【二分算法】-- 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;
    }

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

相关文章:

  • MySQL(第3周)-database命令
  • SVN 拉取,文件冲突 解决办法
  • ruoyi-vue创建一个学生管理系统(CRUD)
  • 使用 OpenSSL 和 Python 实现 AES-256-CBC 加密与解密(安全密钥管理)
  • Spring Boot 与 Spring MVC 有何不同
  • f QT测试
  • 微服务的认识与拆分
  • Ubuntu用户安装cpolar内网穿透
  • 实战:DHCP服务器配置与防御欺骗攻击(附华为设备命令)
  • react基础语法视图层类组件
  • 如何精准打点解决卡牌、SLG、开放大世界、放置类游戏卡顿难题
  • 洗鞋小程序(源码+文档+讲解+演示)
  • 基于SpringBoot的美食信息推荐系统设计与实现(源码+SQL脚本+LW+部署讲解等)
  • C++设计模式总结
  • Java中的四种排序算法详解
  • 【JavaWeb学习Day24】
  • 【langchain/入门】使用langchain调用本地部署的大模型(以llama.cpp以及ollama为例)
  • excel的导入和下载(poi)
  • 强化科技内核 “人工智能+”助力农业新质生产力飞跃
  • Hexo博客Icarus主题不蒜子 UV、PV 统计数据初始化配置