一、题目

二、代码
正数边界问题比较麻烦,全部转化为负数。
比如 dividend= -10,divisor= -3 那么-10= -3+ -3+ -3+ -1;所以最后的结果是3,根据题意只要返回商即可,但这样会超时。所以需要进行优化比如- 10 和 -3,因为(-10) - ( - 3) <= -3,-10 - (-3×2^1) > - 3×2^1。
class Solution {
public int divide(int dividend, int divisor) {
if(dividend == Integer.MIN_VALUE && divisor == -1)
return Integer.MAX_VALUE;
boolean flag = (dividend > 0 && divisor > 0)||(dividend < 0 && divisor < 0);
int result = 0;
//全都转化为负数
dividend = -Math.abs(dividend);
divisor = -Math.abs(divisor);
while(dividend <= divisor) {
int temp = divisor;
int c = 1;
while(dividend - temp <= temp) {
temp = temp << 1;
c = c << 1;
}
dividend -= temp;
result += c;
}
return flag ? result : -result;
}
}
本文探讨了整数除法的算法实现,特别是在处理负数输入时的优化策略。通过将所有输入转换为负数,利用位运算加速计算,避免了传统逐次减法的超时问题。
738

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



