Middle
/* Gün boyunca istifadəçilərin onlayn olma intervallarını göstərən iki sıralanmış siyahı verilir. İntervalın başlanğıcı, sonunda sərt şəkildə kiçikdir. Hər iki istifadəçinin onlayn olduğu intervalları hesablamaq lazımdır. İntervallar saatlarda göstərilir və 0-dan 24-ə qədər ola bilər. */ kesişim( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] kesişim( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function kesişim(istifadəçi1, istifadəçi2) { // kodunuzu buraya yazın }
sobes.tech Süni İntellekt
AI-dan cavab
Для нахождения пересечения двух списков интервалов можно использовать алгоритм с двумя указателями, проходя по обоим спискам одновременно и вычисляя пересечения текущих интервалов.
Пример решения на 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 — длины списков интервалов.