Решаю
задачу на codewars: дан массив массивов, в которых записаны различные интервалы, требуется посчитать длину всех интервалов, за вычетом перекрывающих друг друга. Пробовал решить задачу через
new Set()
и через массивы, но и так, и так получается ошибка:
<--- Last few GCs --->
[1:0x7fb0ba8fb2d0] 2027 ms: Scavenge 1153.5 (1186.9) -> 1153.5 (1186.9) MB, 51.4 / 0.0 ms (average mu = 1.000, current mu = 1.000) allocation failure
[1:0x7fb0ba8fb2d0] 3094 ms: Mark-sweep 1727.3 (1760.7) -> 1721.5 (1756.2) MB, 388.8 / 0.0 ms (+ 35.6 ms in 12 steps since start of marking, biggest step 4.6 ms, walltime since start of marking 2436 ms) (average mu = 1.000, current mu = 1.000) allocat
<--- JS stacktrace --->
FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
Вот два варианта решения:
1 вариант:
const sumIntervals = (intervals) => {
let setOut = new Set()
let out = []
intervals.forEach(element => {
for (let i = element[0]; i < element[1]; ++i) {
setOut.add(i)
}
});
return (setOut.size)
}
2 вариант:
const sumIntervals = (intervals) => {
let out = []
intervals.forEach(element => {
for (let i = element[0]; i < element[1]; i++) {
out.push(i)
}
});
out = out.sort();
let result = out.filter((item, index, array) => {
return array[index] != array[index + 1]
})
return result.length
}