69. x 的平方根

非常简单的一个题,用二分法逼近求出ans即可,额外注意下溢出问题。

不过我要给自己增加难度,用long或者BigNum实现没意思,只能使用int类型

换句话当出现溢出时我们自己得检测出来

原代码(会溢出)

class Solution {
public int mySqrt(int x) {
int l = 1;
int r = x;
while (l < r) {
int mid = (l + r) / 2;// l+r会溢出
if (mid * mid == x) { // 乘法会溢出
return mid;
} else if (mid * mid < x) {
l = mid + 1;
} else {
r = mid;
}
}
if (l * l > x) l--;
return l;
}
}

两处会出现溢出,我们换种不溢出的方法实现即可了

优化代码

class Solution {
public int mySqrt(int x) {
int l = 1;
int r = x;
while (l < r) {
int mid = l / 2 + r / 2;
if (l % 2 == 1 && r % 2 == 1) {
mid++;//当两个数都是奇数时,mid需要+1
}
if (fun(mid, x) == 0) {
return mid;
} else if (fun(mid, x) < 0) {
l = mid + 1;
} else {
r = mid;
}
}
if (fun(l, x) > 0) l--;
return l;
} // 不溢出的判断 mid^2 与x的大小
int fun(int mid, int x) {
int tmp = 0;
if (mid < 10000) {
tmp = mid * mid;//当小于10000时,直接相乘就好了
} else {
// 采用累加的形式,一旦出现负数就说明溢出了
for (int i = 0; i < mid; i++) {
tmp += mid;
if (tmp <= 0) {
return 1;
}
}
}
if (tmp > x) return 1;
if (tmp == x) return 0;
return -1;
}
}

另外一种判断方法:

 // 判断 mid^2 与x的大小
int fun(int mid, int x) {
int tmp = mid * mid;
if (tmp / mid != mid) {
// 出现溢出,mid^2大
return 1;
}
if (tmp == x) return 0;
if (tmp > x) return 1;
return -1;
}

[leetcode] 69. x 的平方根(纯int溢出判断实现)的更多相关文章

  1. Java实现 LeetCode 69 x的平方根

    69. x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...

  2. LeetCode 69 x 的平方根

    链接:https://leetcode-cn.com/problems/sqrtx 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数, ...

  3. 字节笔试题 leetcode 69. x 的平方根

    更多精彩文章请关注公众号:TanLiuYi00 题目 解题思路 题目要求非负整数 x 的平方根,相当于求函数 y = √x 中 y 的值. 函数 y = √x  图像如下: 从上图中,可以看出函数是单 ...

  4. [LeetCode]69. x 的平方根(数学,二分)

    题目 https://leetcode-cn.com/problems/sqrtx 题解 方法一:牛顿迭代法 按点斜式求出直线方程(即过点Xn,f(Xn)),然后求出直线与x轴交点,即为Xn+1: 求 ...

  5. Leetcode 69. Sqrt(x)及其扩展(有/无精度、二分法、牛顿法)详解

    Leetcode 69. Sqrt(x) Easy https://leetcode.com/problems/sqrtx/ Implement int sqrt(int x). Compute an ...

  6. SQL语句中 int 溢出 + Asp语句中 Long 溢出

    晚上5点多,同事在QQ告诉我,一个用户向他反应,在他登录的时候显示错误信息,我们在管理平台查看该用户的基本信息时,也显示错误信息. 经过初步分析,原来是在执行 SQL语句的时候发生Int溢出: sql ...

  7. leetcode-零钱兑换—int溢出

     零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: c ...

  8. 69.x的平方根 (平)(简单)

    实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4输出: 2示例 2: ...

  9. Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence)

    Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母. ...

随机推荐

  1. 1083 List Grades

    Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...

  2. 漫画 | 公司测试因提Bug不规范,锒铛入狱~

    互联网人罪状系列 1.上班第一天,前端把后端告上县衙,还列了 5 宗罪 2. 程序员状告产品经理八大罪状 (上) 3.程序员状告产品经理八大罪状(下) 开发人员与测试人员的关系,就如同程序员与产品经理 ...

  3. 『政善治』Postman工具 — 3、补充:restful风格接口的项目说明

    目录 (一)RESTful架构风格特点 1.统一接口风格 2.规范的HTTP请求方法 3.HTTP响应码 4.什么是无状态 (二)JSON数据格式说明 1.什么是JSON 2.JSON格式的特点 3. ...

  4. 软件篇-05-融合ORB_SLAM2和IMU闭环控制SLAM底盘运动轨迹

      前面我们已经得到了当前底盘在世界坐标系中的位姿,这个位姿是通过融合ORB_SLAM2位姿和IMU积分得到的,在当前位姿已知的case下,给SLAM小车设置一个goal,我这里是通过上位机设置,然后 ...

  5. 【Redis连接超时】记录线上RedisConnectionFailureException异常排查过程

    项目架构: 部分组件如下: SpringCloudAlibaba(Nacos+Gateway+OpenFeign)+SpringBoot2.x+Redis 问题背景: 最近由于用户量增大,在高峰时期, ...

  6. showdan

    from shodan import Shodan import json api = Shodan("") result = api.search('windows') with ...

  7. Markdown修改字体颜色

    在写blog时,想高亮某些字,但是发现markdown更改字体颜色不像word里那么方便,于是查了一下,要用一下代码进行更改字体颜色,还可以更改字体大小,还有字体格式 <font 更改语法> ...

  8. 混部之殇-论云原生资源隔离技术之CPU隔离(一)

    作者 蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友.目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作. 导语 混部,通常指在离线混部(也有离在线混部之说 ...

  9. (9)MySQL进阶篇SQL优化(InnoDB锁-记录锁)

    1.概述 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点意味着:只有通过索引条件检索 ...

  10. DirectX渲染时Clear无效的原因(造成叠影)

    最近在开发D3D程序的过程中,发现一件很奇怪的事情,就是在Render的时候,纹理总是留有"残影"(即上次Render后的帧):如上图,是一副纹理绕中心点旋转的向日葵,但是可以看到 ...