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;

}

 

你可能感兴趣的:(LeetCode)