[leetcode] 69. x 的平方根(纯int溢出判断实现)
非常简单的一个题,用二分法逼近求出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溢出判断实现)的更多相关文章
- Java实现 LeetCode 69 x的平方根
		
69. x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...
 - LeetCode 69 x 的平方根
		
链接:https://leetcode-cn.com/problems/sqrtx 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数, ...
 - 字节笔试题 leetcode 69. x 的平方根
		
更多精彩文章请关注公众号:TanLiuYi00 题目 解题思路 题目要求非负整数 x 的平方根,相当于求函数 y = √x 中 y 的值. 函数 y = √x 图像如下: 从上图中,可以看出函数是单 ...
 - [LeetCode]69. x 的平方根(数学,二分)
		
题目 https://leetcode-cn.com/problems/sqrtx 题解 方法一:牛顿迭代法 按点斜式求出直线方程(即过点Xn,f(Xn)),然后求出直线与x轴交点,即为Xn+1: 求 ...
 - Leetcode 69. Sqrt(x)及其扩展(有/无精度、二分法、牛顿法)详解
		
Leetcode 69. Sqrt(x) Easy https://leetcode.com/problems/sqrtx/ Implement int sqrt(int x). Compute an ...
 - SQL语句中 int 溢出 + Asp语句中 Long 溢出
		
晚上5点多,同事在QQ告诉我,一个用户向他反应,在他登录的时候显示错误信息,我们在管理平台查看该用户的基本信息时,也显示错误信息. 经过初步分析,原来是在执行 SQL语句的时候发生Int溢出: sql ...
 - leetcode-零钱兑换—int溢出
		
零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: c ...
 - 69.x的平方根 (平)(简单)
		
实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4输出: 2示例 2: ...
 - Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence)
		
Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母. ...
 
随机推荐
- Django+Vue+Docker搭建接口测试平台实战
			
一. 开头说两句 大家好,我叫林宗霖,是一位测试工程师,也是全栈测开训练营中的一名学员. 在跟着训练营学习完Docker容器技术系列的课程后,理所应当需要通过实操来进行熟悉巩固.正好接口自动化测试平台 ...
 - C#如何优雅的多表读取
			
关键词:C#.SqlDataReader.IDataReader.NextResult().Read(). Load().Dapper.多表,方便索引和搜索 最近有个需求,需要读一下模具系统的模具信息 ...
 - pyqt5 菜单栏+信息提示框
			
前言 使用pyqt5 添加菜单栏 单击菜单栏 弹出信息框(MessageBox用法) 菜单栏 功能 Action是Qt中单独引入的一个对象,对应QAction类.Action表示一个独立的操作,是将界 ...
 - Vue2.0组件之间通信
			
Vue中组件这个特性让不少前端er非常喜欢,我自己也是其中之一,它让前端的组件式开发更加合理和简单.笔者之前有写过一篇Vue2.0子父组件通信,这次我们就来聊一聊平级组件之间的通信. 首先我们先搭好开 ...
 - DVWA之File Upload (文件上传漏洞)
			
目录 Low: Medium: 方法一:抓包修改文件的type 方法二:00截断 High: Impossible : Low: 源代码: <?php if( isset( $_POST[ 'U ...
 - 插入排序——Python实现
			
插入排序Python实现 # -*- coding: utf-8 -*- # @Time : 2019/10/28 20:47 # @Author : yuzhou_1shu # @Email : y ...
 - spring-boot-maven-plugin not found的解决方案
			
spring-boot-maven-plugin not found 在maven测试的生命周期都没有错,但是就是爆红 参考了很多的链接,没有成功解决,最后得到真正有帮助的方法,添加springboo ...
 - 初始化mysql报错bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
			
原因:缺少libaio.so.1 解决办法:安装即可 yum install -y libaio
 - SSM久别遇新坑
			
SSM久别遇新坑 久别个锤子,也就几天没看,改bug改到怀疑人生 maven的父子模块问题 众所周知,用maven建立一个空的模块,在它之下,将原本的各层次结构分别新建为一个子模块,就能够将各业务进行 ...
 - Eclipse中System.out.println()快捷键生成方法
			
输入syso,再按ALT+/,如果不显示,就在输入完整一行 System.out.println(); 之后点击5次shift键,显示是否使用粘滞键,点击是, 再输入sout,再按ALT+/ ...