Пропущенные диапазоны дат - PullRequest
1 голос
/ 27 августа 2011

Мне нужно найти все пропущенные диапазоны дат за оставшуюся часть года, учитывая набор диапазонов дат.Все диапазоны дат попадают в один и тот же год.И нет никаких совпадений между диапазонами дат.

например: [(31.01.2011 - 01.01.2011), (05.06.2011 - 01.12.2011)] доступно вВ этом случае собраны следующие пропущенные диапазоны дат [(01.01.2011 - 30.01.2011), (05.02.2011 - 04.04.2011), (12.02.2011-12 / 31/2011)]

Каким был бы эффективный способ решения этой проблемы?

1 Ответ

1 голос
/ 27 августа 2011

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

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

Надеюсь, это поможет!

...