IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode--29.两数相除 -> 正文阅读

[数据结构与算法]LeetCode--29.两数相除

题目

题解

1、采用直接想减的方式进行处理

//直接相减,在leetCde中无法提交,提示超时
    public static int divide(int dividend, int divisor){
        int quotient = 0;
        boolean postiveNumber = true;
        if((dividend>0 && divisor<0) ||  (dividend<0 && divisor>0)){
            postiveNumber = false;
        }
        long absDividend = Math.abs((long)dividend);
        long absDivisor = Math.abs((long)divisor);
        while(absDividend >= absDivisor){
            absDividend -= absDivisor;
            quotient++;
            if(quotient >= Integer.MAX_VALUE){
                return Integer.MAX_VALUE;
            }
        }
        if(!postiveNumber){
            return -quotient;
        }
        return  quotient;
    }

2、使用移位运算实现计算

public static int divide1(int dividend, int divisor){
        //存放商数
        long quotient = 0;
        //返回结果值
        int result = 0;
        //判断返回结果是+/-
        boolean postiveNumber = true;
        //两种情况返回结果为-
        if((dividend>0 && divisor<0) ||  (dividend<0 && divisor>0)){
            postiveNumber = false;
        }
        //将除数和被除数进行取绝对值,转为long型防止-2^31绝对值后变为0.
        long absDividend = Math.abs((long)dividend);
        long absDivisor = Math.abs((long)divisor);
        //如果被除数小于除数,返回结果为0.
        if(absDividend<absDivisor) return 0;
        /**
         *该方法类似递归,当被除数大于等于除数时,将一直调用移位算法进行计算。
         * 当移位算法满足条件后,用被除数-移位算法的除数最大值,下一次调用移位算法时,使用差值作为被除数,并且每次的移位值进行累加。
         * 当最后一次被除数和除数相等时,商数最后加1,得到商值。
         */
        while (absDividend >= absDivisor) {
            long tmp = absDivisor,tempQuotient=1 ;
            /**
             * 当被除数大于等于临时除数移位后的值时,对临时除数和临时商数进行移位。
             */
            while(absDividend >= tmp<<1){
                tmp<<=1;
                tempQuotient<<=1;
            }
            absDividend -= tmp;
            quotient += tempQuotient;

        }
        /**
         * 商值使用long存储,当商值>int类型的最大值,返回商值最大值。
         * 由于int类型的除法出现最大值的情况有以下两种:
         * 1、-2147483648 / 1 = -2147483648 不需要取最大值,最后的计算结果正确。
         * 2、-2147483648 / -1 = 2147483648 需要取int类型的最大值。
         */
        return result = postiveNumber? quotient>Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)quotient : (int)-quotient;
    }

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 11:40:49  更:2021-10-13 11:43:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:39:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码