Проблема с календарем и определением свободного места

#javascript #algorithm #calendar

#javascript #алгоритм #Календарь

Вопрос:

Я пытаюсь решить проблему с интервальным календарем.

Учитывая загруженные места в виде набора данных в календаре Outlook пользователя и время, необходимое для встречи (например, 45 минут), напишите метод, чтобы найти открытое доступное место для планирования встречи.

Ввод:
per1: (1,5) (10, 14) (19,20) (27,30)

per2: (3,5) (12,15) (18,21) (23,24)
Вывод: (6,9) (16,17) (22,22) (25,26)

Я пытаюсь понять, как я могу решить эту проблему, используя:

A) Ванильный JavaScript (ES5 / ES6)

Б) Использование структуры данных, такой как деревья интервалов и т.д.

Я думаю, может быть, объединить оба календаря и отсортировать их в порядке возрастания времени начала, а затем начать поиск слота? Пожалуйста, поправьте меня, если я ошибаюсь.

Нужен ваш совет / предложения по тому же.

Комментарии:

1. Каковы ограничения на сложность во времени и пространстве?

2. Можете ли вы объяснить? Можете ли вы сделать предположение и справиться с проблемой?

3. (1,5) это набор абсолютных часов, верно? т. е. 1am - 5am ?

4. Да. правильно, это 0-24 часа. Итак, если меня попросят указать интервал в час между ними, тогда он должен вернуть время или диапазон, где это возможно.

Ответ №1:

Учитывая, что это набор абсолютных часов и задействовано всего два человека, вы могли бы поддерживать массив состояний длиной 24. Запустите цикл, чтобы отметить все часы, когда p1 и p2 заняты. Вы останетесь с массивом часов, в течение которых оба они не будут заняты, а затем извлеките абсолютные промежутки между такими интервалами. Вот скрипка (https://jsfiddle.net/r9nq63tk/1 /), который обрабатывает маркировку часов занятости.

 let freeHours = new Array(24);
// Mark the busy hours
let intervals = [];
for(let hours = 0; hours < 24; hours  ) {
  // Find the ranges where the hours have not been marked and push it to intervals
}