Сообщение от рони
|
Math.min(...arr)
|
на здоровенном массиве это свалится в переполнение стека.
----
мой вариант:
function getMaxCount(dates) {
const sortedByBegin = dates.slice().sort((a, b) => a[0] - b[0]);
const ends = dates.map(d => d[1]).sort((a, b) => a - b);
let count = 0, endPos = 0;
return sortedByBegin.reduce((max, date, i) => {
// учитываем все выезды, которые были после предыдущей проверки
while (endPos < ends.length && ends[endPos] <= date[0]) {
count--;
endPos++;
}
return Math.max(max, ++count);
}, 0);
}
alert(getMaxCount([
[1, 2],
[1, 3],
[2, 4],
[2, 3]
]));
работает за O(N * ln(N)) времени и O(N) памяти, но при этом не закладывается на максимальные даты, плюс можно применить например для отрезков, у которых начало и конец вещественные. Универсально, в общем.
если интервалы уже отсортированы по дате заезда, то вторую строку лучше переписать так
const sortedByBegin = dates;