#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
}