Sobes.tech
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 — длины списков интервалов.