grioja, ответ, на который вы ссылаетесь, дает вам время суток, доступное для желаемой длины слота.Время занятости / доступности представлено битами, например:
1100001110
(Это будет 30 доступных минут, затем 60 минут занятости, затем 45 доступных, а затем 15 занятых.) Затем вы получите двоичное число, которое представляет длину доступного временного интервала, который вы хотите найти, скажем:
111
(Это означает, что вы хотите найти интервал из 45 доступных минут.) Затем вы пытаетесь сместить 2 числа друг против друга:
11000011100000000111
11000011100000001110
11000011100000011100
... и так далее, для каждой возможной относительной длины смещения.Операция «И», которую он показывает в этом ответе, определяет, совпадают ли 1 в номере «желаемой длины слота» со всеми 1 в номере «доступных времен».Если это так, вы нашли приемлемое время.
Кстати, вы могли бы сделать то же самое другими способами.Например, вы можете представлять занятое / доступное время символами в строке и использовать регулярное выражение, чтобы найти доступный слот желаемой длины.
Обратите внимание, что это общий подход (который в основном представляет собой просто «линейный поиск»") не будет масштабироваться, если список доступных / занятых временных интервалов очень длинный.Есть и другие подходы, которые в этом случае будут намного быстрее.