Middle
/* Ичке тартипте жайгашкан эки тизмеде күндөлүк убакта колдонуучулардын онлайн болуу интервалдары берилет. Интервалдын башталышы аякчысынан такыр кичине. Эки колдонуучу онлайн болгон интервалдарды эсептеп чыгуу керек. Интервалдар сааттарда көрсөтүлгөн жана 0дан 24кө чейин болушу мүмкүн. */ кесишүү( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] кесишүү( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function кесишүү(колдонуучу1, колдонуучу2) { // кодду ушул жерге жазгыла }
sobes.tech AI
AIден жооп
Для нахождения пересечения двух списков интервалов можно использовать алгоритм с двумя указателями, проходя по обоим спискам одновременно и вычисляя пересечения текущих интервалов.
Пример решения на 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 — длины списков интервалов.