面试热题(x的平方根)

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

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

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

       这道题虽然是简单题,可它表现的也不是那么简单,刚看到题的时候,我也想的是用内置函数,可是正当我写的时候,看到了题目的要求(可我还是用)

return (int)Math.pow(x,0.5);

 我又拿了其他方式写了几次,现在给大家分享一下我的做题思路

第一种方式(找区间):

我们可以假设为该区间是由红绿颜色组成的,红色代表的是小于等于目标值,绿色代表大于目标值,这样:

 通过不断的移动,指针终会从红色变为绿色,我们求的目标值就是红色区域的最后一个元素

 //利用二分查找进行求解public int mySqrt(int x) {if(x==0||x==1){return x;}int r=find(x,0,x);return r-1;}public boolean isGree(int val,int x){return (long)val*val>x;}public int find(int x,int left,int right){if(left>right){return 0;}//找到最右侧的第一个红色while(left<right){int mid=left+(right-left)/2;if(isGree(mid,x)){right=mid;}else{left=mid+1;}}return left;}

 方法二(普通的二分搜索)

    public int mySqrt(int x) {if(x==0||x==1){return x;}int left=0;int  right=x;while(left<=right){int mid=left+(right-left)/2;if(mid==x/mid){return mid;}else if(mid<x/mid){left=mid+1;}else{right=mid-1;}}return right;}

方法三(最右侧的二分搜索):

       这种方法我觉的你学会了你才是对二分搜索有了一定的理解,它的取值范围还是它的边界初始值,因为这种靠左侧靠右侧的方法训话条件都是left<right,而不是left等于right,因为题目中给定的参数根号x是可以取到的,所以我们为了凑写个条件写成right=x+1,这样就可以套我们的模板了,具体模板看一起学算法(二分搜索篇)

 public int mySqrt(int x) {if(x==0||x==1){return x;}int left=0;int  right=x+1;while(left<right){int mid=left+(right-left)/2;if(mid<=x/mid){left=mid+1;}else{right=mid;}}return left-1;}

模板就套好了,当我提交的时候,错了!!!

 最后几个居然过不去,遇到这种情况过不去,千万别回头检查代码的问题,过了90%多的代码一般不会出现什么大的问题,我建议的方法是直接打表

      if(x==2147483647){return 46340;}

然后过了,这种直接打表的方式还是很好用的,效率也嘎嘎高!!!

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

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

相关文章

【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

这篇文章&#xff0c;主要介绍如何使用JavaFreemarker模板引擎&#xff0c;根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;创建Freemarker工具类 &…

回调函数实现

案例1&#xff1a; 将集合里面的对象根据不同的时间粒度转为对应的月末&#xff0c;季末&#xff0c;年末 集合里面的对象未知&#xff0c;且字段名称未知&#xff0c; 调用方法&#xff1a; public static void main(String[] args) {List<InvoicingNewRi> list new …

.net 6 efcore一个model映射到多张表(非使用IEntityTypeConfiguration)

现在有两张表&#xff0c;结构一模一样&#xff0c;我又不想创建两个一模一样的model&#xff0c;就想一个model映射到两张表 废话不多说直接上代码 安装依赖包 创建model namespace oneModelMultiTable.Model {public class Test{public int id { get; set; }public string…

“深入解析JVM内部机制:从字节码到垃圾回收“

标题&#xff1a;深入解析JVM内部机制&#xff1a;从字节码到垃圾回收 摘要&#xff1a;本文将从字节码生成、类加载、运行时数据区域和垃圾回收等方面深入解析JVM的内部机制&#xff0c;并通过示例代码展示其工作原理和实践应用。 正文&#xff1a; 一、字节码生成 JVM是基…

面试热题(前中序遍历构建树)

给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 题目中是给定两个数组&#xff0c;一个是存放这颗树的前序遍历的数组&#xff0c;一个是存放这棵树的…

如何把pdf转成cad版本?这种转换方法非常简单

将PDF转换成CAD格式的优势在于&#xff0c;CAD格式通常是用于工程设计和绘图的标准格式。这种格式的文件可以在计算机上进行编辑和修改&#xff0c;而不需要纸质副本。此外&#xff0c;CAD文件通常可以与其他CAD软件进行交互&#xff0c;从而使得工程设计和绘图过程更加高效和精…

Xilinx A7开发板LVDS IO无输出问题解决方法

使用A7-35T FGG484的FPGA开发板bank16上的IO作为差分LVDS的输入输出&#xff0c;搭建输入输出测试工程发现LVDS可以输入、无法输出。查阅UG471&#xff0c;找到如下信息&#xff1a; 手册中已经针对A7的LVDS做了明确的应用说明&#xff1a; &#xff08;1&#xff09;HP bank上…

Mr. Cappuccino的第57杯咖啡——简单手写Mybatis大致原理

简单手写Mybatis大致原理 大致原理项目结构项目代码代码测试 大致原理 底层基于JDK动态代理技术实现 项目结构 项目代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

笙默考试管理系统-MyExamTest--backBtn

笙默考试管理系统-MyExamTest--backBtn 目录 一、 笙默考试管理系统-MyExamTest--backBtn 二、 笙默考试管理系统-MyExamTest--backBtn 三、 笙默考试管理系统-MyExamTest--backBtn 四、 笙默考试管理系统-MyExamTest--backBtn 五、 笙默考试管理系统-MyExamTest--ba…

SpringBoot统一功能处理(AOP思想实现)(统一用户登录权限验证 / 异常处理 / 数据格式返回)

主要是三个处理&#xff1a; 1、统一用户登录权限验证&#xff1b; 2、统一异常处理&#xff1b; 3、统一数据格式返回。 目录 一、用户登录权限校验 &#x1f345; 1、使用拦截器 &#x1f388; 1.1自定义拦截器 &#x1f388; 1.2 设置自定义拦截器 &#x1f388;创建cont…

一零六七、JVM梳理

JVM&#xff1f; Java虚拟机&#xff0c;可以理解为Java程序的运行环境&#xff0c;可以执行Java字节码&#xff08;Java bytecode&#xff09;并提供了内存管理、垃圾回收、线程管理等功能 java内存区域划分?每块内存中都对应什么? 方法区&#xff1a;类的结构信息、常量池、…

Typescript+vite+sass手把手实现五子棋游戏(放置类)

Typescriptvitesass手把手实现五子棋游戏&#xff08;放置类&#xff09; 下面有图片和gif可能没加载出来 上面有图片和gif可能没加载出来 导言 最近练习Typescript&#xff0c;觉得差不多了&#xff0c;就用这个项目练练手&#xff0c;使用Typescript纯面向对象编程。 开源…

马斯克收购AI.com域名巩固xAI公司地位;如何评估大型语言模型的性能

&#x1f989; AI新闻 &#x1f680; AI拍照小程序妙鸭相机上线商业工作站并邀请摄影师进行内测 摘要&#xff1a;AI拍照小程序妙鸭相机将上线面向商业端的工作站&#xff0c;并邀请摄影师进行模板设计的内测。妙鸭相机希望为行业提供更多生态产品&#xff0c;扩大行业规模&a…

面试总结-2023版

本文受众主要为&#xff0c;互联网技术研发人员。 技术面试一般三面和HRBP面不太会卡人&#xff0c;主要都是停在了一面和二面上。我这次换工作前期主要是一面通过率比较低&#xff0c;后面主要是二面通过低。 总结影响面试通过的几点因素&#xff1a; 是否真的招人&#xf…

在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换

1.首先需要下载并安装openOffice,下载地址为&#xff1a; Apache OpenOffice download | SourceForge.net 2.安装后&#xff0c;可以测试下是否可用&#xff1b; 3.build.gradle中引入依赖&#xff1a; implementation group: com.artofsolving, name: jodconverter, version:…

vue前端 让年月日 加上23:59:59

yyyy/MM/dd HH:mm:ss 格式 // 获取 lateCreateTime 的原始时间戳 const timestamp new Date(this.queryAO.lateCreateTime).getTime();// 将时间戳转换为指定格式的字符串 const formattedDateTime new Date(timestamp).toLocaleString("zh-CN", {year: "num…

安卓4G核心板开发板_MTK6785/MT6785(Helio G95)安卓手机主板方案

联发科MTK6785&#xff08;Helio G95&#xff09;安卓核心板采用八核 CPU 具有两个强大的 Arm Cortex-A76 处理器内核&#xff0c;主频高达 2.05GHz&#xff0c;外加六个 Cortex-A55 高效处理器。其强大的图形性能由 Arm Mali-G76 MC4 提供&#xff0c;速度可提升至 900MHz 。 …

ubuntu22.04网络配置

背景 之前也用过ubuntu&#xff0c;但是这次使用了ubuntu22&#xff0c;发现网络配置是使用yaml文件来配置的&#xff0c;于是就做了下对比ubuntu16网络配置 # 配置文件在/etc/network/interfaces&#xff0c;默认配置是&#xff1a; auto lo iface lo inet loopback# 网络配…

【云原生】K8S二进制搭建二:部署CNI网络组件

目录 一、K8S提供三大接口1.1容器运行时接口CRI1.2云原生网络接口CNI1.3云原生存储接口CSI 二、Flannel网络插件2.1K8S中Pod网络通信2.2Overlay Network2.3VXLAN2.4Flannel 三、Flannel udp 模式的工作原理3.1ETCD 之 Flannel 提供说明 四、vxlan 模式4.1Flannel vxlan 模式的工…

java.sql.SQLSyntaxErrorException: ORA-00909: 参数个数无效

问题&#xff1a; 在Select里采用Contact(%,#name,%)报错参数个数无效 原因&#xff1a; 回想以前用Mysql的时候就是这样用的&#xff0c;没有问题&#xff0c;在这里就出问题了&#xff0c;所以确定问题在oracle数据库上&#xff0c;经过查询得知&#xff0c;oracle和mysql…