Browse Source

Вроде бы работающая функция для интервалов.

Последовательно переворачиваю, тест-кейсы проходит
master
Дмитрий 3 years ago
parent
commit
91af0b7a35
  1. 24
      task_3.py

24
task_3.py

@ -95,24 +95,28 @@ def find_intersection(interval_A, interval_B) -> list:
def enlarge_elapsed_intervals(intervals): def enlarge_elapsed_intervals(intervals):
# ключ - начало, значние - конец. Если по ключу "начало" уже есть # ключ - начало, значние - конец. Если по ключу "начало" уже есть
# значение, то сохраняем max(существующее, новое) # значение, то сохраняем max(существующее, новое)
beginnings = {interval[0]: interval[1] for interval in intervals}
endings = {interval[1]: interval[0] for interval in intervals}
# чистка конечных интервалов. ключ в словаре - начало интервала.
# проходим по исходному списку и выбираем наибольшее конечное
# значение (самый поздний) из интервалов с одинаковыми началами
beginnings = {interval[0]: interval[1] for interval in intervals}
for interval in intervals: for interval in intervals:
begin = interval[0] begin = interval[0]
end = interval[1] end = interval[1]
beginnings[begin] = max(beginnings[begin], end) beginnings[begin] = max(beginnings[begin], end)
endings[end] = min(endings[end], begin)
print(f"{beginnings=}") print(f"{beginnings=}")
endings = {beginnings[k]: k for k in beginnings}
for interval in intervals:
begin = interval[0]
end = interval[1]
if endings.get(end):
endings[end] = min(endings[end], begin)
print(f"{endings=}") print(f"{endings=}")
beginnings_list = list(beginnings.values()) result = [[endings[k], k] for k in endings]
endings_lsit = list(endings.values()) return result
test = [
[endings_lsit[i], beginnings_list[i]] for i in range(len(beginnings_list) - 1)
]
return test
def appearance(intervals): def appearance(intervals):

Loading…
Cancel
Save