Если перекрытий нет и все диапазоны относятся к одному и тому же году, вы можете отсортировать диапазоны по возрастанию по времени начала. Затем пропущенные диапазоны попадают между 1 января и первой датой начала, между всеми диапазонами и с конца последнего диапазона до 31 декабря. Вы должны будете обязательно отфильтровать пустые диапазоны, которые могут возникнуть (например, , если один диапазон заканчивается, как только начинается следующий).
Этот алгоритм потребует O (n log n) времени для сортировки диапазонов, а затем O (n) времени, чтобы найти пропущенные диапазоны. В качестве альтернативы, если вы хотите реализовать свою собственную функцию сортировки, вы можете использовать сортировку по сегментам или сортировку по осям для сортировки диапазонов за время O (n), поскольку диапазон возможных дат мал и конечен. Первая версия проще в реализации и выполняется за O (n log n), а вторая за O (n).
Надеюсь, это поможет!