【发布时间】:2020-01-30 03:20:09
【问题描述】:
每当我在在线平台上编码时,我必须以某种方式将列表中的元素相互比较,我会使用下面的代码,这对我来说是最有效的。这是我练习的最后一个代码。就是找到两个相同元素之间的最大索引。
max=0
for i in range(len(mylist)):
if max==(len(mylist)-1):
break
for j in range(i + 1, len(mylist)):
if mylist[i] == mylist[j]:
if max>(abs(i-j)):
max=abs(i-j)
它运行大多数测试用例,但有时会显示“超出时间限制”。我知道这与约束和时间复杂度有关,但我仍然找不到更好的方法。如果有人可以帮助我,那就太好了。
【问题讨论】:
-
如果我们知道
#do something,我想我们可以省略内部循环。例如,如果它是对一个列表的逐元素操作,我们可以删除第二个循环。我认为这取决于第二个循环的主体。请提供更多信息。 -
您能分享问题文本(或URL)吗? 做某事很重要。作为提示,您可以使用
collections.Counter。 -
在所有情况下都知道
i > j时使用abs(i-j)似乎很奇怪。为什么不直接使用j-i,并消除对abs的调用?
标签: python list data-structures constraints time-complexity