| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 【剑指Offer】整数(一)整数除法 - 两数相除 - JavaScript -> 正文阅读 |
|
[JavaScript知识库]【剑指Offer】整数(一)整数除法 - 两数相除 - JavaScript |
从今天开始我们一起来刷《剑指offer(专项突破版)》,原书是Java版本的,这里就是以JavaScript角度来看这些算法题。 剑指 Offer II 001. 整数除法此题与LeetCode主站的 29. 两数相除 相同 题目描述
回顾JavaScript中的数字类型不像别的语言数字分整数和浮点数,在JavaScript中只有一个数字类型。它是一个双精度的64位的 由内置数字类型表示的整数限制最大值是
2
53
?
1
2^{53} - 1
253?1 用
在这种情况下,安全性指的是该值不能是存在舍入(round)误差的结果。 这些不安全的值在
为了检查是否安全,可以使用ES6的
分析(朴素解法)这题限制我们不能使用 要计算 例如 计算
考虑正负问题上述讨论假设被除数和除数都是正整数。如果有负数则可以将它们先转换成正数,计算正数的除法之后再根据需要调整商的正负号。 由于题目要求不能使用乘法,所以我们使用异或操作符
我们还没有考虑溢出问题,因为题目要求 假设我们的环境只能存储 32 位有符号整数 考虑溢出问题对于32位的整数而言,最小的整数是 ? 2 31 -2^{31} ?231,最大的整数是 2 31 ? 1 2^{31}-1 231?1。 由于是整数的除法并且除数不等于0,因此商的绝对值一定小于或等于被除数的绝对值。因此,int型整数的除法只有一种情况会导致溢出:即 ? 2 31 -2^{31} ?231/ ? 1 -1 ?1。这是因为最大的正数为 2 31 ? 1 2^{31} - 1 231?1,如果将 ? 2 31 -2^{31} ?231转换为正数则会导致溢出,即 2 31 2^{31} 231超出了正数的范围。
性能优化上面这种很直观的解法存在一个问题:当被除数很大但除数很小时,减法操作执行的次数会很多。 可以将上述解法稍做调整。当被除数大于除数时,继续比较判断被除数是否大于除数的2倍,如果是,则继续判断被除数是否大于除数的4倍、8倍等。 如果被除数最多大于除数的 2 k 2^k 2k倍,那么将被除数减去除数的 2 k 2^k 2k倍,然后将剩余的被除数重复前面的步骤。 由于每次将除数翻倍,因此优化后的时间复杂度是 下面以15/2为例:
题解下面用代码实现,由于题目要求不能使用
提交可以看到效率提高很多!!!
|
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 10:47:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |