【发布时间】:2018-12-22 20:05:27
【问题描述】:
假设我有一个日志寄存器,用于记录用户从某个服务器进入和退出的时间。我需要找到最多会话的时间。如果有多个可能的答案,则应选择最小的一个。输入包含第一行中的会话数。
示例 输入:
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()返回一个key排序的dict,就简单多了。
无论如何,这是我的家庭任务,它在其中一个测试输入上运行超过 1 秒(给定时间限制)。可以做些什么来加快它的速度?我读过关于区间树的文章,但我不确定它是否相关。
【问题讨论】:
-
“最高效的”...“使用 Python”是一个挑眉。如果每一纳秒都很重要,你为什么要使用 Python?你想用多少可读性来换取速度?
-
这看起来非常像 hackerrank.com "riddle" ...
-
@timgeb 我认为这没有任何问题。假设这个条件是任务的一部分。
标签: python algorithm intervals