Leetcode: Divide Two Integers

Divide two integers without using multiplication, division and mod operator.

Best method(跟discuss vote最高相似):只有一种情况整数除以整数会overflow,那就是Integer.MIN_VALUE除以-1,这种情况特殊分析。

之所以要用long a, b代替dividend和divisor是因为:比如Integer.MAX_VALUE除以1,第21行的while循环,1不管怎么右移,因为是整数,永远无法比Integer.MAX_VALUE大。所以会一直死循环。所以被除数和除数都用Long型,但是result不能用Long型,因为返回的时候会报错:原因是损失精度

 

基本思路:long a = dividend, long b = divisor, 商c可以表示为 2^k + 2^m + ....;

a = b * c = b * ( 2^k + 2^m + ....)   =    b*2^k + b*2^m + ... 

b*2^k 表示把divisor b左移k位(即b<<k), 而且b<<k+1就会大于a,根据这个性质,我们可以找出k,即一直把b左移一位直到b大于a为止,这样移动的结果比如(b<<x)  > a, 那么x-1就是我们要找的k. 构造商的话,我们就定义一个int res, res |= 1<<k

 

 1 public class Solution {
 2     public int divide(int dividend, int divisor) {
 3         if (dividend==Integer.MIN_VALUE && divisor==-1) return Integer.MAX_VALUE;
 4         boolean isNeg = false;
 5         long a = dividend;
 6         long b = divisor;
 7         if (b == 0)
 8             throw new ArithmeticException();
 9         if (a < 0) {
10             isNeg = !isNeg;
11             a = -a;
12         }
13         if (divisor < 0) {
14             isNeg = !isNeg;
15             b = -b;
16         }
17         long num = a;
18         int res = 0;
19         while (num >= b) {
20             int i = 0;
21             while (num >= (b<<i)) {
22                 i++;
23             }
24             res |= 1<<(i-1);
25             num -= b<<(i-1);
26         }
27         return isNeg? -res : res;
28     }
29 }

 

转载于:https://www.cnblogs.com/EdwardLiu/p/3800518.html

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

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

相关文章

详细解读什么是自适应巡航?

来源&#xff1a;智车科技摘要&#xff1a;自适应巡航设计初衷是减轻驾驶员长途驾驶的疲劳&#xff0c;极为复杂的城市路况并不是它发挥作用的地方。虽然现在的自适应巡航系统具备了根据前车情况、根据路况减速&#xff0c;甚至是刹停的功能&#xff0c;不过其开发之初便是为了…

CenterNet:Objects as Points

CenterNet论文链接 一.背景 1.anchor-base缺点          (&#xff11;)&#xff0e;anchor的设置对结果影响很大,不同项目这些超参都需要根据经验来确定&#xff0c;难度较大&#xff0e; (&#xff12;)&#xff0e;anchor太过密集&#xff0c;其中很多是负样本…

初步认识迭代服务器和并发服务器

http://www.cnblogs.com/wolflion/archive/2011/07/13/2539138.html 迭代服务器比较原始&#xff0c;它的原型可以描述成&#xff1a; while(1){new_fd 服务器accept客户端的连接(new_fd accept(listenfd, XX, XX))逻辑处理在这个new_fd上给客户端发送消息关闭new_fd}也就是说…

美国正在衰落的24个行业:“猝不及防”还是“温水煮青蛙”?

来源&#xff1a;资本实验室摘要&#xff1a;技术发展一日千里&#xff0c;外部环境日新月异。在这个变化无处不在的世界&#xff0c;许多行业都在不可避免地经历着或是猝不及防&#xff0c;或是“温水煮青蛙”般的冲击。近期&#xff0c;美国财经网站24/7 Wallst根据过去十年的…

距离与相似度计算

一.余弦相似度 加速计算参考这篇文章 from math import *def square_rooted(x):return round(sqrt(sum([a*a for a in x])), 3)def cosine_similarity(x,y):numerator sum(a*b for a, b in zip(x,y))denominator square_rooted(x)*square_rooted(y)return round(numerator/f…

程序的跳转模式

程序内部有自己的一套跳转语法&#xff0c;如果想跳转&#xff0c;需要参考已有代码的实现方式。 先说一下具体情况&#xff1a; 这几天的心情很不平静&#xff0c;老是感觉自己还在高考的样子&#xff0c;想着是怎么拿下这个考试关。现在明白问题所在了&#xff0c;我必须考虑…

5G 产业链重要细分投资领域

来源&#xff1a;乐晴智库精选▌2019年全球电子产业将保持增长ICInsights预计2018年全球电子产品销售额16220亿美元&#xff0c;同比增长5.1%&#xff0c;2019年将达到16800亿美元&#xff0c;同比增长3.5%&#xff0c;2017~2021年CAGR4.6%。预计2019年通信市场销售额5350亿美元…

CPNDet:Corner Proposal Network for Anchor-free, Two-stage Object Detection

CPNDet论文链接 一.背景 anchor-based方法将大量框密集分布在feature map上&#xff0c;在推理时&#xff0c;由于预设的anchor与目标差异大&#xff0c;召回率会偏低。而anchor-free不受anchor大小限制&#xff0c;在任意形状上会更加灵活&#xff0c;但是像CornerNet这种,先…

Unix/Linux环境C编程入门教程(3) Oracle Linux 环境搭建

Unix/Linux版本众多&#xff0c;我们推荐Unix/Linux初学者选用几款典型的Unix/Linux操作系统进行学习。2010年9月&#xff0c;Oracle Enterprise Linux发布新版内核——Unbreakable Enterprise Kernel&#xff0c;专门针对Oracle软件与硬件进行优化&#xff0c;最重要的是Oracl…

最权威北美放射学会年会回顾:AI的进化与下一个前沿

翻译 : 高璇摘要&#xff1a;人工智能在成像领域的前景必须为终端用户带来时间节省、资源优化、精度增益和感知增益&#xff08;接近精准健康方法&#xff09;。前两个是指生产力方面&#xff0c;而后两个是指质量方面。人工智能在成像领域的脚步不会停留在这里——它已经帮助重…

Registry注册机制

前言:不管是Detectron还是mmdetection&#xff0c;都有用到这个register机制&#xff0c;特意去弄明白&#xff0c;记录一下。 首先看Registry代码: # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reservedfrom typing import Dict, Optional, Iterable, T…

Android Volley 库通过网络获取 JSON 数据

本文内容 什么是 Volley 库 Volley 能做什么 Volley 架构 环境 演示 Volley 库通过网络获取 JSON 数据 参考资料 Android 关于网络操作一般都会介绍 HttpClient 以及 HttpConnection 这两个包。前者是 Apache 开源库&#xff0c;后者是 Android 自带 API。企业级应用&#xff0…

python刷题+leetcode(第二部分)

100. 简化路径 思路:栈 class Solution:def simplifyPath(self, path: str) -> str:stack []for path_ in path.split(/):if path_ not in [, ., ..]:stack.append(path_)elif path_ .. and stack:stack.pop()return / /.join(stack) c实现: class Solution { public:s…

这一年,信息技术领域上演的“断舍离”

来源&#xff1a;中国科学报摘要&#xff1a;刚刚踏入2018年&#xff0c;信息技术产业领域就被“熔断”“幽灵”这两个几乎波及全行业的芯片漏洞所笼罩。孰料&#xff0c;该领域接下来上演的剧情——从美国断然发布对中兴通讯的出售禁令&#xff0c;到Uber无人驾驶汽车撞人致死…

20140625 程序 进程 线程 物理存储器

1、程序 .exe就是一个程序 2、进程 运行一个.exe的可执行程序后&#xff0c;就启动了该程序的一个实例&#xff0c;我们称之为“进程”。是资源申请&#xff0c;调度和独立运行的单位&#xff0c;使用系统的运行资源 3、线程 线程有线程内核对象和线程栈组成。 线程内核对象&am…

利用JasperReport+iReport进行Web报表开发

用JasperReportiReport进行Web报表开发 序言在非常多实际的项目里&#xff0c;报表都是当中十分重要的组成部分&#xff0c;比如把查询结果以报表的形式呈现出来。这里所提到的报表可不是简单的二维表&#xff0c;而是拥有复杂表头的、多维的、能够在执行期从数据库中自己主动读…

AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE(VIT)

最近看transformer用于CV比较热门&#xff0c;特意去进行了解&#xff0c;这里用分类的一篇文章进行讲解。 NLP中的transformer和代码讲解参考我另一篇文章。 论文链接&#xff1a;AN IMAGE IS WORTH 16X16 WORDS :TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE 一.思想 其…

人工智能领域的未来和挑战

来源&#xff1a;创新研究摘要&#xff1a;人工智能是一门综合了计算机科学、生理学、哲学的交叉学科。凡是使用机器代替人类实现认知、识别、分析、决策等功能&#xff0c;均可认为使用了人工智能技术。作为一种基础技术&#xff0c;人工智能在很多行业都有广泛应用。五道集团…

javascript 基础知识1 数据类型

首先javascript是一种具有面向对象能力的&#xff0c;解释型程序设计语言。 js对大小写敏感&#xff0c;一定要采取一致的字符大小写形式&#xff0c;在js中的结束分号&#xff08;&#xff1b;&#xff09;是可选的&#xff0c;为了避免JS语句错误&#xff0c;我们还是要注意添…

2018年科技公司融资纪录十大排行榜!中国四家公司上榜

来源&#xff1a;网易智能摘要&#xff1a;国外媒体近日盘点了2018年全球融资最多的十家机器人技术公司&#xff0c;中国有四家公司上榜&#xff0c;包括商汤科技、优必选、京东和依图科技。获得融资并不能保证取得成功&#xff0c;这是机器人行业在2018年学到的艰难的一课。今…