LeetCode【0029】两数相除

本文目录

  • 1 中文题目
  • 2 求解方法:位运算
    • 2.1 方法思路
    • 2.2 Python代码
    • 2.3 复杂度分析
  • 3 题目总结

1 中文题目

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。

返回被除数 dividend 除以除数 divisor 得到的

注意:假设环境只能存储 32 位 有符号整数,其数值范围是 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [231,2311] 。本题中,如果商 严格大于 2 31 − 1 2^{31} − 1 2311 ,则返回 2 31 − 1 2^{31} − 1 2311 ;如果商 严格小于 − 2 31 -2^{31} 231 ,则返回 − 2 31 -2^{31} 231

示例:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = 3.33333.. ,向零截断后得到 3
输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = -2.33333.. ,向零截断后得到 -2

提示:

  • − 2 31 ≤ d i v i d e n d , d i v i s o r ≤ 2 31 − 1 -2^{31} \leq dividend, divisor \leq 2^{31} - 1 231dividend,divisor2311
  • divisor != 0

2 求解方法:位运算

2.1 方法思路

方法核心

  • 使用位运算实现除法
  • 通过倍增法快速逼近商

实现步骤

(1)符号处理:

  • 使用异或确定结果符号
  • 将被除数和除数转为正数处理

(2)快速逼近:

  • 使用位运算倍增除数
  • 通过减法求得商

(3)结果处理:

  • 应用正确的符号
  • 处理溢出情况

方法示例

输入:dividend = 10, divisor = 3过程演示:
1. 初始状态:dividend = 10, divisor = 3result = 02. 第一次循环:curr_divisor = 3multiple = 1位运算后:curr_divisor = 6, multiple = 2dividend = 10 - 6 = 4result = 23. 第二次循环:curr_divisor = 3multiple = 1dividend = 4 - 3 = 1result = 34. 结束循环:dividend < divisor返回:3

2.2 Python代码

class Solution:def divide(self, dividend: int, divisor: int) -> int:# 处理特殊情况INT_MIN, INT_MAX = -2**31, 2**31 - 1# 处理除数为0的情况if divisor == 0:return INT_MAX# 处理溢出情况if dividend == INT_MIN and divisor == -1:return INT_MAX# 记录结果的符号# 异或运算:相同为0,不同为1sign = -1 if (dividend > 0) ^ (divisor > 0) else 1# 将被除数和除数都转为正数dividend = abs(dividend)divisor = abs(divisor)# 结果result = 0# 使用位运算优化while dividend >= divisor:# 当前除数curr_divisor = divisor# 当前商(从1开始)multiple = 1# 快速逼近# dividend >= curr_divisor << 1 确保不会溢出while dividend >= (curr_divisor << 1) and (curr_divisor << 1) > 0:curr_divisor <<= 1  # 除数左移一位(乘2)multiple <<= 1      # 商左移一位(乘2)# 减去当前最大的可能值dividend -= curr_divisor# 添加到结果中result += multiple# 应用符号并处理溢出result = -result if sign == -1 else result# 确保结果在32位整数范围内if result > INT_MAX:return INT_MAXif result < INT_MIN:return INT_MINreturn result

2.3 复杂度分析

  • 时间复杂度:O(log n),n是被除数的大小
    • 每次循环被除数至少减半
  • 空间复杂度:O(1)
    • 只使用常数级别的额外空间

3 题目总结

题目难度:中等
数据类型:整数
应用算法:位运算

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

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

相关文章

微服务链路追踪skywalking安装

‌SkyWalking是一个开源的分布式追踪系统&#xff0c;主要用于监控和分析微服务架构下的应用性能。‌ 它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案&#xff0c;特别适用于微服务、云原生架构和基于容器的环境&#xff08;如Docker、K8s、Mesos&…

5G的发展演进

5G发展的驱动力 什么是5G [远程会议&#xff0c;2020年7月10日] 在来自世界各地的政府主管部门、电信制造及运营企业、研究机构约200多名会议代表和专家们的共同见证下&#xff0c;ITU-R WP 5D#35e远程会议宣布3GPP 5G技术&#xff08;含NB-IoT&#xff09;满足IMT-2020 5G技…

matlab建模入门指导

本文以水池中鸡蛋温度随时间的变化为切入点&#xff0c;对其进行数学建模并进行MATLAB求解&#xff0c;以更为通俗地进行数学建模问题入门指导。 一、问题简述 一个煮熟的鸡蛋有98摄氏度&#xff0c;将它放在18摄氏度的水池中&#xff0c;五分钟后鸡蛋的温度为38摄氏度&#x…

开源 2 + 1 链动模式、AI 智能名片、S2B2C 商城小程序在用户留存与品牌发展中的应用研究

摘要&#xff1a;本文以企业和个人品牌发展中至关重要的用户留存问题为切入点&#xff0c;结合管理大师彼得德鲁克对于企业兴旺发达的观点&#xff0c;阐述了用户留存对品牌营收的关键意义。在此基础上&#xff0c;深入分析开源 2 1 链动模式、AI 智能名片、S2B2C 商城小程序在…

搭建Python2和Python3虚拟环境

搭建Python3虚拟环境 1. 更新pip2. 搭建Python3虚拟环境第一步&#xff1a;安装python虚拟化工具第二步&#xff1a; 创建虚拟环境 3. 搭建Python2虚拟环境第一步&#xff1a;安装虚拟环境模块第二步&#xff1a;创建虚拟环境 4. workon命令管理虚拟机第一步&#xff1a;安装扩…

对接阿里云实人认证

对接阿里云实人认证-身份二要素核验接口整理 目录 应用场景 接口文档 接口信息 请求参数 响应参数 调试 阿里云openApi平台调试 查看调用结果 查看SDK示例 下载SDK 遇到问题 本地调试 总结 应用场景 项目有一个提现的场景&#xff0c;需要用户真实的身份信息。 …

基于卷积神经网络的车辆损坏部位检测系统带gui

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

CHI atomics 传输——CHI(6)

原子事务&#xff0c;指的是此事务就像原子一样是不可分割的&#xff0c;要么所有操作全部完成&#xff0c;要么全部不执行&#xff0c;不存在执行部分操作的情况。 ALU (Arithmetic Logic Unit) 算术逻辑单元&#xff0c;ALU在HN或SN AddrData&#xff1a;当前memory中的数据…

批量从Excel某一列中找到符合要求的值并提取其对应数据

本文介绍在Excel中&#xff0c;从某一列数据中找到与已知数据对应的字段&#xff0c;并提取这个字段对应数值的方法。 首先&#xff0c;来明确一下我们的需求。现在已知一个Excel数据&#xff0c;假设其中W列包含了上海市全部社区的名称&#xff0c;而其后的Y列则是这些社区对应…

有趣的Midjourney作品赏析(附提示词)

中文提示词&#xff1a;国风少年 C4D软件,高分辨率,超细节,超现实主义, 英文提示词&#xff1a;National Style Youth Cinema4D,high resolution,hyper detailed,surrealism, --niji 6 --ar 1:1 中文提示词&#xff1a;粘土模型&#xff0c;男性穿着中世纪欧洲蓝色盔甲&#x…

SpringBootCloud 服务注册中心Nacos对服务进行管理

介绍 Nacos&#xff08;Naming and Configuration Service&#xff09;是一个开源的、动态的服务发现、配置管理和服务管理平台&#xff0c;特别适用于云原生应用和微服务架构。它可以作为服务注册中心&#xff0c;用于微服务的注册、发现、配置管理等。在微服务架构中&#x…

强化学习入门笔记(Reinforcement Learning,RL) 强推!

由于本人的近期研究方向涉及到强化学习&#xff0c;本科时已经学习过了&#xff0c;但是感觉还是有些概念和算法没有学懂学透&#xff0c;所以想重新系统性的学习一下&#xff0c;记录了整个学习过程&#xff0c;而且对当时没有理解不是特别深刻的内容有了一些更加深刻的理解&a…

【计算机网络】【网络层】【习题】

计算机网络-网络层-习题 文章目录 13. 图 4-69 给出了距离-向量协议工作过程&#xff0c;表&#xff08;a&#xff09;是路由表 R1 初始的路由表&#xff0c;表&#xff08;b&#xff09;是相邻路由器 R2 传送来的路由表。请写出 R1 更新后的路由表&#xff08;c&#xff09;。…

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…

美国10月CPI符合预期,12月降息稳了?

KlipC报道&#xff1a;当地时间11月13日&#xff0c;美国劳工部公布数据显示&#xff0c;美国10月CPI同比上升2.6%&#xff0c;CPI环比上升0.2%&#xff1b;核心CPI同比上升3.3%&#xff0c;核心CPI环比上升0.3%。 数据公布后&#xff0c;交易员加大了对美联储12月降息的押注。…

游戏引擎学习第四天

视频参考:https://www.bilibili.com/video/BV1aDmqYnEnc/ BitBlt 是 Windows GDI&#xff08;图形设备接口&#xff09;中的一个函数&#xff0c;用于在设备上下文&#xff08;device context, DC&#xff09;之间复制位图数据。BitBlt 的主要用途是将一个图像区域从一个地方复…

堆排序与链式二叉树:数据结构与排序算法的双重探索

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 引言 一.堆排序 1.1 版本一 核心概念 堆排序过程 1.2 版本二 堆排序函数 HeapSort 向下调整算法 AdjustDown 向上调整算法 AdjustUp 二.链式二叉树 2.1 前中后序遍历 链式二叉树的结构 创建链式二叉树 前序遍历…

Rust语言在系统编程中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 Rust语言在系统编程中的应用 引言 Rust 概述 定义与原理 发展历程 Ru…

车-路-站-网”信息耦合的汽车有序充电

电动汽车作为一种环保、的交通工具&#xff0c;正逐渐成为未来交通的发展趋势。然而&#xff0c;大规模电动汽车的无序充电可能导致电网负荷波动、电压下降等问题&#xff0c;影响电网的安全稳定运行。为了解决这些问题&#xff0c;需要制定有效的电动汽车有序充电策略&#xf…

42个接受医工交叉领域投稿的二三四区期刊汇总|个人观点·24-11-14

小罗碎碎念 昨天晚上的推文总结了94个接受医工交叉研究投稿的一区期刊&#xff0c;今天这期推文把剩下的二三四区期刊补上。我会按照二三四区的顺序介绍&#xff0c;其中每个区会按照大类进行区分。 同样&#xff0c;由于公众号的排版限制&#xff0c;如下图所示的表格&#…