Prime Subtraction Operation
MediumArrayMathBinary SearchGreedyNumber Theory
Solution
export function primeSubOperation(nums: number[]): boolean {
const n = nums.length;
const maxElement = nums.reduce((prev, num) => Math.max(prev, num), 0);
const isValid = new Array<boolean>(maxElement + 1).fill(true);
isValid[1] = false;
for (let i = 2; i <= Math.sqrt(maxElement + 1); i++) {
if (!isValid[i]) continue;
for (let j = i * i; j <= maxElement; j += i) {
isValid[j] = false;
}
}
let currentValue = 1;
let currentIndex = 0;
while (currentIndex < n) {
const difference = nums[currentIndex] - currentValue;
if (difference < 0) {
return false;
}
if (isValid[difference] || difference === 0) {
currentIndex += 1;
}
currentValue += 1;
}
return true;
}
Complexity
n
:nums
의 길이,m
:nums
의 가장 큰 수- Time:
- Space: