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