Предположим, у меня есть журнал регистрации времени входа и выхода пользователей с какого-либо сервера.Мне нужно найти время, в которое проводятся максимальные сессии.Если существует более одного возможного ответа, должен быть выбран самый маленький.Вход содержит количество сессий в первой строке.
Пример ввода:
5
4 5
0 3
1 9
7 8
2 6
Выход:
2
Я пробовал этот скрипт:
from collections import Counter, OrderedDict
load = Counter()
with open("input.txt", "r") as f:
n = int(f.readline())
for i in range(n):
session = f.readline()
session = session.split()
load.update(range(int(session[0]), int(session[1])+1))
load = load.most_common()
i = 0
max = load[0][1]
candidates = []
while load[i][1] == max:
candidates.append(load[i][0])
i += 1
print(min(candidates))
Сначала я использую Counter()
для подсчета вхождений всех точек.Во-вторых, я использую load = load.most_common()
, чтобы упорядочить результирующий дикт по происшествиям.Наконец, я нахожу минимальное значение всех ключей с соответствующим максимальным значением (= количество вхождений).
На самом деле, если бы Counter()
вернул диктовку, упорядоченную по ключу, это было бы намного проще.
В любом случае, это моя домашняя задача, и она выполняется более 1 секунды (с учетом ограничения по времени) на одном из тестовых входов.Что можно сделать, чтобы ускорить его?Я читал о деревьях интервалов, но я не уверен, что это уместно.