На этот вопрос нужен ответ с кодом.Вот реализация Python алгоритма, который упоминает пользователь 612112, что немного лучше, чем в принятом ответе:
- Инициализация пустого списка точек вывода
- Сортировка диапазоновпо конечной точке и обработайте их в порядке конечной точки
- Для каждого диапазона, если последняя выходная точка меньше начала диапазона, добавьте конечную точку диапазона к выходному набору
Обратите внимание, что вам не требуется никакой предварительной обработки для удаления избыточных диапазонов, и вам не нужна сортировка для различения нескольких диапазонов с одной и той же конечной точкой.
# given some inclusive ranges
ranges=[(1,5),(2,4),(4,6),(3,7),(5,9),(6,6)]
# sort by the end points
ranges.sort(key=lambda p:p[1])
#generate required points
out=[]
last = None
for r in ranges:
if last == None or last < r[0]:
last = r[1]
out.append(last)
#print answer
print(out)