我是靠谱客的博主 踏实小海豚,最近开发中收集的这篇文章主要介绍算法系列——两数相除(Divide Two Integers),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

题目链接:https://leetcode-cn.com/problems/divide-two-integers/
Divide two integers without using multiplication, division and mod operator.

If it is overflow, return MAX_INT.

解题思路

题目要求我们不使用乘法,除法和取模运算 实现两个数的除法。

一种可能的方法,可以利用减法,不断从被减数中减去减数,值到被减数小于等于0,统计减法操作的次数。这种方法的时间复杂度为O(n).我们尝试加速这个过程。对减数b做累加操作,得到2b,4b,8b,16b…2的n次方b.知道大于被减数a 此时的有k个b。然后从 a中减去 k*b.重复上述过程,累加k。最后得到结果。

此时的时间复杂度为O(logn)

程序实现

public class Solution {
    public int divide(int dividend, int divisor) {
        if(divisor==0)
            return Integer.MAX_VALUE;
        boolean negative=(dividend<0&&divisor>0)||(dividend>0&&divisor<0);
        long a=Math.abs((long)dividend);
        long b=Math.abs((long)divisor);
        if(a<b)
            return 0;
        long res=0;
        while(a>=b){
           long count=1;
           long temp=b;
           while(temp+temp<=a){
               temp+=temp;
               count+=count;
           }
           res+=count;
           a-=temp;
        }
        if(negative)
            res=0-res;
        if(res>Integer.MAX_VALUE)
           res=Integer.MAX_VALUE;
        return (int)res;
    }
}

最后

以上就是踏实小海豚为你收集整理的算法系列——两数相除(Divide Two Integers)的全部内容,希望文章能够帮你解决算法系列——两数相除(Divide Two Integers)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部