Sobes.tech
Middle

/* Divi sakārtoti saraksti ar intervāliem, kad lietotāji bija tiešsaistē dienas laikā. Intervāla sākums ir stingri mazāks par beigām. Jāskaita intervāli, kad abi lietotāji bija tiešsaistē. Intervāli ir norādīti stundās, pieņemot, ka tie var būt no 0 līdz 24. */ krustojums( [[8, 12], [17, 22]], [[5, 11], [14, 18], [20, 23]] )// [[8, 11], [17, 18], [20, 22]] krustojums( [[9, 15], [18, 21]], [[10, 14], [21, 22]] )// [[10, 14]] function krustojums(lietotajs1, lietotajs2) { // ievadiet savu kodu šeit }

sobes.tech AI

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