29. Divide Two Integers
Last updated
Last updated
/**
* Time complexity : O(n)
* Space complexity : O(1)
*/
class Solution {
public int divide(int dividend, int divisor) {
if(dividend == 0 || divisor == 1) {
return dividend;
} else if(divisor == -1) {
if(dividend == Integer.MIN_VALUE) {
return Integer.MAX_VALUE;
}
return dividend * divisor;
}
int m = Math.abs(dividend);
int n = Math.abs(divisor);
int count = 0;
while(m-n >= 0) {
m -= n;
count++;
}
return ((dividend >= 0 && divisor >=0) ||
(dividend < 0 && divisor < 0))? count: count*-1;
}
}/**
* Time complexity : O(logN)
* Space complexity : O(1)
*/
class Solution {
public int divide(int dividend, int divisor) {
if(dividend == 0 || divisor == 1) {
return dividend;
} else if(divisor == -1) {
if(dividend == Integer.MIN_VALUE) {
return Integer.MAX_VALUE;
}
return dividend * divisor;
}
long pDividend = Math.abs((long) dividend);
long pDivisor = Math.abs((long) divisor);
int count = 0;
while(pDividend >= pDivisor) {
int shift = 0;
while(pDividend >= (pDivisor<<shift+1)) {
shift++;
}
pDividend -= (pDivisor<<shift);
count += (1<<shift);
}
return ((dividend >= 0 && divisor >= 1) ||
(dividend < 0 && divisor < 0))? count: count*-1;
}
}