Prime Subtraction Operation - Sieve of Eratosthenes & Binary Search [JS]
Solution: Sieve of Eratosthenes & Binary Search
var primeSubOperation = function(nums) {
let primes = getPrimes(Math.max(...nums));
for (let i = 0; i < nums.length; i++) {
let low = 0, high = primes.length - 1;
while (low < high) {
let mid = Math.ceil((low + high) / 2);
let isValid = i === 0 ? primes[mid] < nums[i] : primes[mid] < nums[i] && nums[i] - primes[mid] > nums[i - 1];
if (isValid) {
low = mid;
} else {
high = mid - 1;
}
}
let isValid = i === 0 ? primes[low] < nums[i] : primes[low] < nums[i] && nums[i] - primes[low] > nums[i - 1];
let toSubtract = isValid ? primes[low] : 0;
nums[i] -= toSubtract;
if (i > 0 && nums[i] <= nums[i - 1]) return false;
}
return true;
};
function getPrimes(n) {
let isPrime = Array(n).fill(1);
for (let i = 2; i <= n; i++) {
if (!isPrime[i]) continue;
for (let j = i * i; j <= n; j += i) {
isPrime[j] = 0;
}
}
let primes = [];
for (let i = 2; i <= n; i++) {
if (isPrime[i]) primes.push(i);
}
return primes;
}
Comments
Post a Comment