LeetCode刷题——29. Divide Two Integers(Part 2靠大家)

栏目: 编程工具 · 发布时间: 5年前

内容简介:上篇文章写了以我自己的思路来解决这个问题,但是运行时间过长,看了leetcode 上的高效写法是使用位运算的解法,当初我自己写这个问题是也想到了可以用位运算快一点,但是因为基础差,对位运算的掌握不牢靠,还是选择使用了减法的思路,在此将leetcode上高效解法做一个思路分析,加深下自己对位运算的理解[100,3]上面的算法将以前的减操作优化称为位移操作,一次可以累加2的n次方个,减少了循环次数,所以比Part 1 中算法要快

上篇文章写了以我自己的思路来解决这个问题,但是运行时间过长,看了leetcode 上的高效写法是使用位运算的解法,当初我自己写这个问题是也想到了可以用位运算快一点,但是因为基础差,对位运算的掌握不牢靠,还是选择使用了减法的思路,在此将leetcode上高效解法做一个思路分析,加深下自己对位运算的理解

LeetCode上高效解法代码

class Solution {
    
    public static int divide(int dividend, int divisor) {
        //首先处理Integer的最小值溢出问题(和我思路一样)
        if (dividend == Integer.MIN_VALUE && divisor == -1) {
            return Integer.MAX_VALUE;
        }
        //判断结果符号(这个写法比我的号,但是结果的时候用到了乘法,难道符合题意??费解  )
        int sign = (dividend < 0) ^ (divisor < 0) ? -1 : 1;
        //取被除数最大值
        long dvd = Math.abs((long) dividend);
        //取除数最大值
        long dvs = Math.abs((long) divisor);
        //定义结果
        int res = 0;
        //循环条件:当被除数大于等于除数时候
        while (dvd >= dvs) {
           //为防止溢出,这里使用long类型
            long temp = dvs;
            long mult = 1;
            //<< 移位操作,向左移动1位
            //当dvd大于dvs*2的mult次方的时候,即计算dvd中最多有2的几次方个dvs
            while (dvd >= (temp << 1)) {
                temp <<= 1;
                mult <<= 1;
            }
            System.out.printf("%d里面有,2的%d次方个%d\r\n", dvd, mult, dvs);
            //计算新的dvd,和累加mult
            dvd -= temp;
            res += mult;
        }
        
        return res * sign;
    }
    
}

用例

[100,3]

输出结果

100里面有,2的32次方个3
4里面有,2的1次方个3

总结

上面的算法将以前的减操作优化称为位移操作,一次可以累加2的n次方个,减少了循环次数,所以比Part 1 中算法要快


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

敏捷软件开发

敏捷软件开发

Robert C.Martin,、Micah Martin / 邓辉、孙鸣 / 人民邮电出版社 / 2010-12 / 79.00元

要想成为一名优秀的软件开发人员,需要熟练应用编程语言和开发工具,更重要的是能够领悟优美代码背后的原则和前人总结的经验——这正是本书的主题。本书凝聚了世界级软件开发大师Robert C. Martin数十年软件开发和培训经验,Java版曾荣获计算机图书最高荣誉——Jolt大奖,是广受推崇的经典著作,自出版以来一直畅销不衰。 不要被书名误导了,本书不是那种以开发过程为主题的敏捷软件开发类图书。在......一起来看看 《敏捷软件开发》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具