busy[i] — встречи i-го сотрудника Т-Банка, пары [start, end] в минутах, конец не включается. Встречи одного человека могут пересекаться и идти в любом порядке. Рабочий день — day = [d0, d1].
Верните по возрастанию все максимальные отрезки внутри дня, где одновременно свободны не меньше need сотрудников и длина не меньше min_len. Отрезок — пара [from, to].
В работе: Синк на 9 человек, без кворума в 7 его не проводят: календарь сам предлагает окна от 30 минут.
Пример 1
busy = [[[540, 600], [570, 630]], [[600, 660]], [[720, 780]]] day = [540, 780] need = 3 min_len = 30
[[660, 720]]
У первого встречи сливаются в [540, 630). Все трое свободны на [660, 720) — 60 минут.
Пример 2
busy = [[[540, 600]], [[560, 620]]] day = [540, 660] need = 1 min_len = 20
[[540, 560], [600, 660]]
Хотя бы один свободен всегда, кроме [560, 600) — тогда заняты оба. Окна [540, 560) и [600, 660).
Ограничения
- 1 ≤ число сотрудников ≤ 10³
- 0 ≤ всего встреч ≤ 10⁵
- 1 ≤
need - 1 ≤
min_len - 0 ≤
d0≤d1≤ 10⁹ - Лимит — 2 с на тест (2000 мс).
print() и console.log() уходят в консоль.
def free_windows(busy, day, need, min_len):
Источник: наша задача на данных Т-Банка. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.