每日一题(LeetCode)----二分查找(三)

news2024/11/20 14:40:50

每日一题(LeetCode)----二分查找(三)

1.题目(69. x 的平方根 )

给你一个非负整数 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.解题思路

思路一: 二分

利用二分的思想,二分的范围最开始就是从0开始到目标数结束

然后我们进行二分,如果我们找到的数的平方比目标数小,那么我们的答案为当前找到的数,然后二分范围的左边界找到的当前数右边的位置,继续进行二分

如果我们如果我们找到的数的平方比目标数大,那么二分范围的右边界变为找到的当前数左边的位置,继续进行二分

直到左边界比右边界大了,结束操作

思路二: 袖珍计算器算法(来源于牛客官方解答)

在这里插入图片描述

思路三: 牛顿迭代(来源于牛客官方解答)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.代码

思路一的代码:

class Solution {
public:
    int mySqrt(int x) {
        int left=0;
        int right=x;
        int ans=-1;
        while(left<=right){
            long long mid=left+(right-left)/2;
            if(mid*mid<=x){
                ans=mid;
                left=mid+1;
            }
            if(mid*mid>x){
                right=mid-1;
            }
        }
        return ans;
    }
};

思路二的代码:

class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }
        int ans = exp(0.5 * log(x));
        return ((long long)(ans + 1) * (ans + 1) <= x ? ans + 1 : ans);
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/sqrtx/
来源:力扣(LeetCode)

思路三的代码:

class Solution {
public:
    int mySqrt(int x) {
        if (x == 0) {
            return 0;
        }

        double C = x, x0 = x;
        while (true) {
            double xi = 0.5 * (x0 + C / x0);
            if (fabs(x0 - xi) < 1e-7) {
                break;
            }
            x0 = xi;
        }
        return int(x0);
    }
};

作者:力扣官方题解
链接:https://leetcode.cn/problems/sqrtx/
来源:力扣(LeetCode)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1154781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安防视频汇聚平台EasyCVR调用播放接口的详细流程

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储…

如何优雅的开发?低代码搭建应用如此轻松

目录 一、前言 二、低代码平台体验简述 三、关于平台 四、场景及用户分析 五、产品分析 1、着重讲一下JNPF的编辑器 2、业务流程 六、最后&#xff0c;说些心里话 一、前言 低代码平台改变了应用交付和管理的模式&#xff0c;大幅缩减交付周期&#xff0c;最终帮助业务…

悠络客荣膺CPSE安博会最高荣誉——金鼎奖

10月24日&#xff0c;第十九届CPSE安博会金鼎奖、百强工程商颁奖典礼暨欢迎晚宴在深圳隆重举行。经过专业评审团队对产品的品质、性能、市场表现、应用价值等多方面因素的权威评估&#xff0c;第十九届CPSE安博会最高荣誉奖“金鼎奖”获奖名单正式揭晓。 悠络客UMind-智慧零售/…

3D虚拟样板间场景制作软件的应用优势及价值

高端家装样板间不仅代表着高品质的家居生活&#xff0c;还是一种生活态度和品味的体现。为了让客户能够更好地体验到高端家装样板间的魅力&#xff0c;许多家装公司和房地产开发商开始尝试使用VR技术来进行样板间的拍摄和展示。通过VR全景拍摄&#xff0c;客户可以在线上进行参…

高效处理大规模数据集的概率型数据结构—— 布隆过滤器 [C++入门]

阅读导航 引言一、布隆过滤器提出二、布隆过滤器的概念三、布隆过滤器的实现1. 插入2. 查找3. 删除&#xff08;不支持&#xff09;C模拟实现布隆过滤器 四、布隆过滤器的优缺点✅优点✅缺点 引言 &#x1f354;在上一篇文章位图中&#xff0c;我们了解了C中位图的概念和实现。…

动作捕捉系统输出四元数、欧拉角数据

四元数和欧拉角是进行无人机、无人车、机器人等相关实验中经常需要获取的数据。NOKOV度量动作捕捉系统支持实时获取数据&#xff0c;也支持采集导出数据。 一、创建刚体 1、在场地中间放置被测物&#xff0c;这时被测物显示在形影软件界面中。 2、在形影软件界面左上角点击“…

银河集团香港优才计划95分获批案例展示!看看是如何申请的?

银河集团香港优才计划95分获批案例展示&#xff01;看看是如何申请的&#xff1f; 今天来分享一则银河集团香港优才计划获批案例&#xff01;客户本科学历非名校、从事业务支援及人力资源行业&#xff0c;优才打分95分&#xff0c;这个条件可能在很多人的印象里&#xff0c;会觉…

C语言实现从键盘输入一个正整数,判断他们是否是回文数,所谓回文数,是指正数和反数都一样例如 123321 是回文数

完整代码&#xff1a; /*从键盘输入一个正整数&#xff0c;判断他们是否是回文数&#xff0c;所谓回文数&#xff0c;是指正数和反数都一样 例如 123321 是回文数*/ #include<stdio.h> //这个数的最大长度 #define N 10 int main(){//length是这个数的长度int num,lengt…

CDN加速技术海外与大陆优劣势对比

内容分发网络&#xff08;CDN&#xff09;是一项广泛应用于网络领域的技术&#xff0c;旨在提高网站和应用程序的性能、可用性和安全性。CDN是一种通过将内容分发到全球各地的服务器来加速数据传输的服务。本文将探讨使用CDN的优势以及国内CDN和海外CDN之间的不同优势和劣势。 …

智能化管理大规模电脑文件的高效方法

在现代社会中&#xff0c;电脑已经成为我们生活和工作中必不可少的工具。随着时间的推移&#xff0c;我们电脑中的文件越来越多&#xff0c;管理起来也变得越来越困难。为了提高工作效率&#xff0c;我们需要学会高效管理电脑文件。下面&#xff0c;我将分享一些在线分享批量智…

Mysql5.7安装配置详细图文教程(msi版本)

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

超级账本区块链Fabric2.4.4版本搭建过程(完整过程)

前提环境:乌班图20.04环境 安装所需要的工具 先配置一下代理源为阿里云代理&#xff1a; sudo apt-get update 更新源 sudo apt-get install ssh 安装远程客户端 sudo apt-get install curl 安装命令行工具 sudo apt-get install git 安装git sudo apt-get install gcc 安装…

C语言之用指针交换两个数

1.指针存放是是地址&#xff0c;所以在用指针交换两个数的时候&#xff0c;需要对指针进行解引用(*p)。 用指针交换两个数&#xff0c;需要知道p1p2与*p1*p2。 p1p1是将p2的值赋值给p1. *p1*p2是将p2指针地址存放的值&#xff0c;赋值给p1指针地址存放的值&#xff0c;即p1地…

YOLOv7改进: AIFI (尺度内特征交互)助力YOLO | YOLO终结者?RT-DETR一探究竟

💡💡💡本文全网首发独家改进: AIFI (尺度内特征交互)助力YOLO ,提升尺度内和尺度间特征交互能力,同时降低多个尺度的特征之间进行注意力运算,计算消耗较大等问题 推荐指数:五星 AIFI | 亲测在多个数据集能够实现涨点 收录: YOLOv7高阶自研专栏介绍: http:…

JSX语法入门

目录 元素与组件 属性与表达式 条件渲染 列表渲染 使用JSX的注意事项 总结 JSX是JavaScript的扩展语法&#xff0c;它允许我们在JavaScript中编写类似HTML的代码。在React中广泛使用JSX来描述用户界面。在本文中&#xff0c;我们将介绍JSX的基础知识&#xff0c;包括元素…

CSDN----Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

库函数sort

1 sort自定义大小cmp bool cmp(Rec a,Rec b)//W1a是否应该排在b前面 { return a.x<b.x;//a小于b就排在前面 // return a>b; }只需在这里改变大于还是小于排序 #include <iostream> #include <algorithm> #include <vector> #include <cti…

脉冲离子风机和普通离子风机有什么区别

脉冲离子风机和普通离子风机都是利用电离空气的原理来净化空气中的微粒和有害气体&#xff0c;但它们的工作原理和性能有所不同。 普通离子风机是通过将电压施加到电极上&#xff0c;使电极周围的空气分子电离&#xff0c;产生负离子&#xff0c;从而吸附空气中的微粒和有害气体…

react中的useReducer复杂的状态管理

reducer官网教程 useReducer 是 React 提供的一个用于状态管理的 Hook。它可以替代 useState&#xff0c;更适用于处理复杂的状态逻辑。 useReducer 接受一个reducer函数和一个初始状态&#xff0c;并返回当前状态以及一个 dispatch 函数&#xff0c;用来触发状态更新。reduce…