Python 如何在没有任何库或模块的情况下优化包含计数的代码?
这是我参加的法语编码竞赛(Algoréa)准备活动的一部分。再一次,这不是真的,只是热身运动 程序应该接收一组作为整数的位置,并且需要输出一个位置经过的最大时间。例如,1 3 2 6 2意味着从1开始,然后到3,经过中间的所有位置,然后返回到2,然后是6,依此类推。这里的输出是4,因为第二个位置已经通过了4次Python 如何在没有任何库或模块的情况下优化包含计数的代码?,python,optimization,Python,Optimization,这是我参加的法语编码竞赛(Algoréa)准备活动的一部分。再一次,这不是真的,只是热身运动 程序应该接收一组作为整数的位置,并且需要输出一个位置经过的最大时间。例如,1 3 2 6 2意味着从1开始,然后到3,经过中间的所有位置,然后返回到2,然后是6,依此类推。这里的输出是4,因为第二个位置已经通过了4次 def move(x1, x2, l): if x1 < x2: l.extend(range(x1, x2)) else: l.ex
def move(x1, x2, l):
if x1 < x2:
l.extend(range(x1, x2))
else:
l.extend(range(x2, x1))
positions = []
for i in range(int(input())):
positions.append(int(input()))
p = [] # positions, but instead of finding [1, 3] you would find [1, 2, 3]
for i in range(len(m) - 1):
move(m[i], m[i + 1], p)
result = [] # count how many times each space was passed
for i in range(max(m)):
wall.append(result.count(i))
print(max(result))
def移动(x1、x2、l):
如果x1list.count()
这里有什么可以做得更好的地方吗?我知道这个问题可能很难回答。正如我的评论一样,我不确定您试图优化的目的是什么。然而,您的方法使用(潜在的)二次空间,而线性空间就足够了。您需要保留一个计数数组,并且每次移动,而不是追加范围,只是将范围覆盖的索引增加1。然后进行最后一次扫描以找到argmax。正如注释所示,我不确定您要优化的是什么。然而,您的方法使用(潜在的)二次空间,而线性空间就足够了。您需要保留一个计数数组,并且每次移动,而不是追加范围,只是将范围覆盖的索引增加1。然后进行最后一次扫描以找到argmax。在这里,生成每个步骤的列表并将它们连接在一起。构建一个字典,其中包含从最小位置到最大位置的键值对及其计数。最后,找到最大计数及其位置
a=[1,3,2,6,2]
项目=[]
对于范围内的i(len(a)-1):
项目+=列表(范围(*已排序(a[i:i+2]))
结果={i:items.count(i)范围内的i(min(items),max(items)+1)}
打印(最大值(result.items(),key=lambda item:item[1]))
在这里,生成每个步骤的列表并将它们连接在一起。构建一个字典,其中包含从最小位置到最大位置的键值对及其计数。最后,找到最大计数及其位置
a=[1,3,2,6,2]
项目=[]
对于范围内的i(len(a)-1):
项目+=列表(范围(*已排序(a[i:i+2]))
结果={i:items.count(i)范围内的i(min(items),max(items)+1)}
打印(最大值(result.items(),key=lambda item:item[1]))
如何优化?-代码行?可读性?内存使用情况?处理时间?你的解决方案有效吗?我是说处理时间,对不起。。。是的,这是可行的,但据我所知,不会更快。如何优化代码行?可读性?内存使用情况?处理时间?你的解决方案有效吗?我是说处理时间,对不起。。。是的,这是可行的,但据我所知,不会更快。我觉得我可能在这里遗漏了一些东西,但这不也是二次的吗?@AmmarHijazi二次时间,是的,二次空间,不是。(你只是在使用一个大小为n
的数组)我觉得我可能在这里遗漏了一些东西,但这不也是二次的吗?@AmmarHijazi二次时间,是的,二次空间,不是。(你只是使用了一个大小为n
的数组)而这段代码可以回答这个问题,提供了关于为什么和/或如何回答这个问题的额外上下文,从而提高了它的长期价值。虽然这段代码可以回答这个问题,提供关于此代码为什么和/或如何回答此问题的附加上下文可提高其长期价值。