29. 两数相除(倍增 + 递归)

LeetCode题解:29.两数相除【Python题解超详细,位运算、二分查找法、递归法】,知识拓展:位运算 LeetCode题解:29.两数相除【Python题解超详细,位运算、二分查找法、递归法】,知识拓展:位运算,基本概念、常见位运算符、左移右移、代码应用 两数相除:给你两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345将被截断为8,-2.7335将被截断至-2。返回被除数dividend除以除数divisor得到的商。 阅读详情
/**
 * 29. 两数相除
 * @author wsq
 * @date 2020/09/29
	 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
	返回被除数 dividend 除以除数 divisor 得到的商。
	整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
	
	示例 1:
	输入: dividend = 10, divisor = 3
	输出: 3
	解释: 10/3 = truncate(3.33333..) = truncate(3) = 3

	示例 2:
	输入: dividend = 7, divisor = -3
	输出: -2
	解释: 7/-3 = truncate(-2.33333..) = -2
	 
	提示:
	被除数和除数均为 32 位有符号整数。
	除数不为 0。
	假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。
	
	链接:https://leetcode-cn.com/problems/divide-two-integers
 */
package com.wsq.leetcode;

public class MyDivide {
	/**
	 * 1. 记录两数最后的符号,同正、同负为正
	 * 2. 使用负数来运算,避免int溢出
	 * 3. 使用倍增的方式运算(一开始使用递减的方式,但是时间太慢了,超时,看其他人的思路修改5555555)
	 * @param dividend
	 * @param divisor
	 * @return
	 */
    public int divide(int dividend, int divisor) {
    	if(divisor == 0) {
    		return 0;
    	}
    	int sign = 0;
    	if((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)) {
    		sign = 1;
    	}
    	
    	dividend = dividend > 0 ? -dividend : dividend;
    	divisor = divisor > 0 ? -divisor : divisor;
    	
    	int ans = div(dividend, divisor);
    	
    	if(sign == 1) {
    		return ans + Integer.MAX_VALUE < 0 ? Integer.MAX_VALUE : -ans;
    	}
    	
    	return ans;
    }
    
    private int div(int dividend, int divisor) {
    	if(dividend > divisor) {
    		return 0;
    	}
    	int ta = dividend;
		int tb = divisor;
		int count = -1;
		while(tb + tb >= ta && tb + tb < 0) {
			tb += tb;
			count += count;
		}
		// 返回值
		return count + div(ta - tb, divisor);
	}

	public static void main(String[] args) {
    	int dividend = 10; 
    	int divisor = 3;
    	MyDivide md = new MyDivide();
    	int ans = md.divide(dividend, divisor);
    	System.out.println(ans);
	}
}

QEMU pcie config空间访问机制 而pci_host_conf/data_le_ops的定义是在hw/pci/pci-host.c里,对于0xCF8端口的处理,因为是地址选通,所以只需要在write的时候记录、read的时候返回记录的值即可。而pci_host_config_write/read_common接口,在前256Bconfig空间的模拟中,也同样是会调用这个接口,所以后续的处理都是一样的。这是真实的硬件设计,而对于QEMU+KVM的虚机场景,显然是要基于硬件实现和虚拟化的需求设计虚机访问config空间的完整流程。 阅读详情

相关推荐

Veeam Backup 13 通过UI界面高效备份VMware ESXi虚拟机的完整指南

本文提供了一份使用Veeam Backup 13图形化界面高效备份VMware ESXi虚拟机的完整指南。内容涵盖从环境准备、添加vCenter/ESXi主机、配置备份存储库,到创建备份任务、设置保留策略与计划,以及执行备份和验证成功的关键步骤。通过直观的UI操作,管理员可以轻松实现虚拟机数据的可靠保护与快速恢复。

weixin_29322553的博客 438

※29. 两数相除(java)

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1: 输入: dividend = 10,...

weixin_43306331的博客 1118

杭电计算机组成原理课程设计-实验七-寄存器堆设计实验

寄存器堆实验实验原理实验内容模块功能说明模块逻辑引脚图寄存器堆模块代码REG模块测试用例REG-ALU测试用例实验结果记录 寄存器堆实验结果及分析ALU_REG运算器模块实验结果及分析探索与思考 实验原理   32×32位的寄存器堆模块示意图如图所示,含有32个寄存器,每个寄存器32位。该寄存器堆具有A和B两个读端口,分别由 5 位的寄存器编号 R_Addr_A 和 R_Addr_B 来寻址 2 个寄存器,读出的数据则由 R_Data_A(32 位)和R_Data_B(32 位)输出。读访问时,没有使能或者

HDU-整蛊小子-⏰☂️/蚂蚁集团研发工程师 1万+

29题:Java实现两数相除

题目要求不能用除法,不过我们处理溢出情况的写法,后面还是要用到的,尤其是 (long) dividend 这个强转的处理,其实就考察了基本数据类型的转换问题,包括最后返回的 (int) result,都是很细节的问题,但却很重要。很遗憾,前 5 个测试用例都是可以顺利通过的,但最后 1 个测试用例耗时会特别长,因为要计算 2147483648 / 1次,这个数太大了,所以我们要想办法优化一下。在数学中,加法是加减乘除的基础,减法是加法的逆运算,乘法是加法的倍增,除法是乘法的逆运算。

qq_64948664的博客 2876

自然二进制数与格雷码的相互转换

自然二进制数与格雷码两者优势: 自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。 格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。 在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。

Loudrs的博客 7494

k最近邻算法——电影分类及案例详解

如图3-7所示,若将国际象棋棋盘放在二维直角坐标系中,格子的边长定义为1,坐标的x轴及y轴和棋盘方格平行,原点恰落在某一格的中心点,则王从一个位置走到其他位置需要的步数恰为二个位置的切比雪夫距离,因此切比雪夫距离也称为棋盘距离。关于这里的距离度量,这个电影分类的例子有2个特征,也就是2维的,可以使用我们高中学过的两点距离公式(两点距离公式其实就是欧氏距离在二维空间上的公式,也就是欧氏距离n的值为2的情况,欧氏距离也称为欧几里德距离)来计算距离,如图3-3所示。对数据进行归一化,避免量纲对计算距离的影响。

ZhShy 4560

两数相除(Java)

Given two integers dividend and divisor, divide two integers without using multiplication, division and mod operator. Return the quotient after dividing dividend by divisor. The integer division sho...

God_Mood的博客 2644

性能测试软件(LR12) 具体汉化(中文)方法

LoadRunner 12 的下载及安装详细过程请参考:https://blog.csdn.net/xiao66guo/article/details/105465854 1、在LoadRunner文件中找到 Setup.exe 可执行文件,并以管理员的身份运行: C盘 —> Temp—>HP LoadRunner 12.02 Community Edition—> D...

多谢大人光临寒舍,请随便看看,喝口茶吧 ☕️☕️☕️ 1993

Java两整数相除向上取整

前言:Java中两个整数相除,如果不能整除,默认是向下取整的。例如:11 除以 3 的结果是 3。然而,某些情况下(eg. 把11个糖果,每3个分一堆,不足三个也分成一堆,可以分几堆?),我们需要向上取整,这样的情况该如果处理呢? 方式一: 添加三目运算符逻辑代码 x / y + (x % y != 0 ? 1 : 0); 这种方法逻辑上很简单,如果x可以整除y,就将x / y 的结果加0,不能整除y就将x / y 的结果加1。 方式二:使用ceil函数 (int)Math.ceil((double.

gao_zhennan的博客 6万+

麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南

麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南

ChenJin_2的博客 276

[leetcode]两数相除(Divide Two Integers)

两数相除(Divide Two Integers) 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 示例 2: 输入: dividend = 7, diviso...

gcn_Raymond的博客 682

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LeetCode29-两数相除

LeetCode29-两数相除 Leetcode / 力扣 29. 两数相除: 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1: 输入:

baodream的博客 340

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Leetcode 29 两数相除

Leetcode两数相除题目描述题解题解一(基于快速乘法思想)题解二(二分思想+快速乘法) 题目描述 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 来源:力扣(LeetCode)题目链接 著作权归领扣网络所有。商业转载请

一点点奋斗的程序媛 389

leetcode-第29题 两数相除

题目 给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数dividend除以除数divisor得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例1: 输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333..) =...

lijianqingfeng的专栏 391

【Leetcode 29】 两数相除

题目描述 方法一: 题干中说明不能用乘法和除法, 那么我们可以用减法, 被除数最多可以减多少个除数还能保证是非负的即可. class Solution: def divide(self, dividend, divisor): sig = True if dividend*divisor > 0 else False # 判断二者相除是正or负 d...

欢迎关注【微信公众号】测试开发Guide,从功能测试进阶测试开发 205

leetcode29.两数相除

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 示例 2: 输入: dividend = 7, divisor = -3 输出: -2 说明: 被除数和除数均为 32 位有...

yyf_blog 384

29. 两数相除

题目 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333…) = truncate(

m0_38127403的博客 140

29 两数相除(2021.07.27)

29. 两数相除 链接:https://leetcode-cn.com/problems/divide-two-integers/ 题目描述见链接内容。 解法1:暴力法 用暴力法解决,直接用被除数减去除数,每减一次,结果加1,要注意的是,这个题目里面,因为限定了除数和被除数的取值范围,所以结果越界的情况只需要在除数等于1或者-1时考虑就行 如果在每次计算时都判断越界的话,暴力法会超时 var divide = function (dividend, divisor) { const MIN = -M

多啦的博客 233

leetcode 29. 两数相除

29. 两数相除 给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。 返回被除数 dividend 除以除数 divisor 得到的商。 整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2 示例 1: 输入: dividend = 10, divisor = 3 输出: 3 解释: 10/3 = truncate(3.33333…) = tru

Qin_酱的博客 266

【Leet-Code】29. 两数相除

【题目解析】 对【除数】进行倍增的方式,与【被除数】比较。 举个例子:11 除以 3 。 首先11比3大,结果至少是1; 然后我让3翻倍,就是6,发现11比3翻倍后还要大,那么结果就至少是2; 那我让这个6再翻倍,得12,11不比12大,退出此轮【倍增】,此轮得到【商】的结果为2。 接下来让11减去刚才最后一次的结果6,剩下5,接下来我们计算5是3的多少倍。此时递归形式出现了,即重复1,2,3步骤。 class Solution: def divide...

Tak-Wah Blog 191

Leetcode——倍增思想

Leetcode——倍增思想

qq_43332536的博客 725

leetcode:29. 两数相除(终于是自己写的了)

好久没自己写一道题了hhh 这道题之前写过,就是用倍增法一直逼近,然后就往了怎么做了 接下来的思路: 1.建立一个2的幂次倍数表 2.反向扫描获取可行的倍数进行减法 3.直到dividend小于divisor结束 src: import "fmt" func divide(dividend int, divisor int) int { //垃圾测试用例 if dividend==-2147483648 && divisor==-1 { return 2.

小楼一夜听春雨 312

【力扣精选】用一拳超人的方式打开力扣,刷爆算法题 —— 龙卷篇

近期的LeetCode 好题分享,给大家带来不一样的解题思路。

秋刀鱼与猫的博客 3454

力扣刷题记录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录#22. 括号生成 #22. 括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 枚举->递归->回溯(backtrack) 可以在一个递归函数中写两个递归调用。先放左括号(, 当左括号放完之后再放右括号),所以会有两个if的递归调用,

weixin_44389206的博客 258

LeetCode精选TOP面试题(中等篇)【出现率降序】

LeetCodeTOP面试题中前300道中等题目

_zhy_cq 2045
上一篇: 145. 二叉树的后序遍历(迭代实现)
下一篇: 701. 二叉搜索树中的插入操作
Lazy mode
博客等级 码龄10年 13粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值