zoukankan      html  css  js  c++  java
  • leetcode Divide Two Integers

    题目:Divide Two Integers 

    思考方式:刚开始无从下手,tag里的提示是binary search 也就是二分搜索,以前的二分搜索都是知道两端开始向中间靠拢。这里的二分搜索是向右方靠拢,  然后循环的地方在如果越界,就在最后的区间内寻找,可见这种二分搜索的效率是不如那种的。但是这依然是O(lgn)的算法,所以说还是有不错的运行效率的。

    如图:

    代码:

    #include<iostream>
    
    using namespace std;
    
    int divide(int dividend, int divisor) {
        long long l = dividend;
        long long r = divisor;
        if (l == -2147483648&&r==-1){
            return INT_MAX;
        }
        if (l == 0 || r == 0)
            return 0;
        int flag = 0;
        if ((l < 0 & r>0) || (l > 0 && r < 0))
            flag = 1;
        long long a = abs(l);
        long long b = abs(r);
    
        if (b > a)
            return 0;
        long long final = 0;
        while (b <= a){
            long long sum = b;
            int n = 1;
            while (sum+sum<= a){
                sum = sum + sum;
                n += n;
            }
            final += n;
            a = a - sum;
        }
        if (flag)
            final = 0 - final;
        return final;
    }
    
    int main(){
        cout << divide(15, 3) << endl;
    }
  • 相关阅读:
    员工转正考核
    前端高级技术考察
    前端基础技术考察
    高级前端评定表
    初级前端评定表
    前端工程师等级评定
    前端软实力
    Decode Ways
    深度学习在目标跟踪中的应用
    Interleaving String
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4448534.html
Copyright © 2011-2022 走看看