LeetCode 29. Divide Two Integers
Solution1:
参考网址:[1]https://blog.youkuaiyun.com/qq_31617121/article/details/80458587
[2]http://www.cnblogs.com/grandyang/p/4431949.html
相当于复杂度优化到logN.
如 100 3
普通方法是 3 + 3 + 3 + 3 … + 3累加到100,数加了多少次
优化方法 3 6 12 24…
1 2 4 8… 看能累加多少次,超过的方法减去求得剩下的值,继续进行累加。
注意边界条件
class Solution {
public:
int divide(int dividend, int divisor) {
if (divisor == 0 || (dividend == INT_MIN && divisor == -1)) return INT_MAX;
long long m = abs((long long)dividend), n = abs((long long)divisor), res = 0;
int sign = ((dividend < 0) ^ (divisor < 0)) ? -1 : 1;
if (n == 1) return sign == 1 ? m : -m;
while (m >= n) {
long long t = n, p = 1;
while (m >= (t << 1)) {
t <<= 1;
p <<= 1;
}
res += p;
m -= t;
}
return sign == 1 ? res : -res;
}
};
LeetCode 29题整数除法复杂度优化
博客围绕LeetCode 29. Divide Two Integers展开,介绍了一种复杂度优化到logN的解法。普通方法是不断累加除数直至接近被除数,而优化方法通过不断翻倍除数和累加次数,超过时减去再继续,同时提醒要注意边界条件。
161

被折叠的 条评论
为什么被折叠?



