Middle
/* Se dan dos listas ordenadas con intervalos de presencia de usuarios en línea durante el día. La hora de inicio del intervalo es estrictamente menor que la de fin. Se necesita calcular los intervalos en los que ambos usuarios estaban en línea. Los intervalos se expresan en horas, considerando que pueden ser horas desde 0 hasta 24. */ intersección( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] intersección( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function intersección(usuario1, usuario2) { // tu código aquí }
sobes.tech AI
Respuesta de la IA
Для нахождения пересечения двух списков интервалов можно использовать алгоритм с двумя указателями, проходя по обоим спискам одновременно и вычисляя пересечения текущих интервалов.
Пример решения на JavaScript:
function intersection(user1, user2) {
let i = 0, j = 0;
const result = [];
while (i < user1.length && j < user2.length) {
const start = Math.max(user1[i][0], user2[j][0]);
const end = Math.min(user1[i][1], user2[j][1]);
if (start < end) { // есть пересечение
result.push([start, end]);
}
// сдвигаем указатель у того интервала, который заканчивается раньше
if (user1[i][1] < user2[j][1]) {
i++;
} else {
j++;
}
}
return result;
}
// Пример использования:
console.log(intersection(
[[8, 12], [17, 22]],
[[5, 11], [14, 18], [20, 23]]
));
// Выведет: [[8, 11], [17, 18], [20, 22]]
Этот алгоритм работает за время O(n + m), где n и m — длины списков интервалов.