如何提高比较列表元素的效率?



每当我在在线平台上编码并且以某种方式必须将列表的元素相互比较时,我都会使用以下代码,在我看来这是最有效的代码。这是我正在练习的最后一个代码。这是为了找到两个相同元素之间的最大索引。

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)

它运行大多数测试用例,但有时会显示"超出时间限制"。我知道这与约束和时间复杂性有关,但我仍然找不到更好的方法。如果有人能帮助我,那就太好了。

在 Python 中使用基于 C 的函数更容易。也不要命名变量 python 类型,如list.

x = [item for i, item in enumerate(l) if item in l[i+1:]]
# do something with list of values

您可以按相等的元素分组,然后在组中找到差异,并保持最大值:

lst = [1, 3, 5, 3, 7, 8, 9, 1]
groups = {}
for i, v in enumerate(lst):
groups.setdefault(v, []).append(i)
result = max(max(group) - min(group) for group in groups.values())
print(result)

输出

7

这种方法的复杂性是O(n)

def get_longest_distance_between_same_elements_in_list(mylist):
positions = dict()
longest_distance = 0
if len(mylist) < 1:
return longest_distance
for index in range(0, len(mylist)):
if mylist[index] in positions:
positions[mylist[index]].append(index)
else:
positions[mylist[index]] = [index]
for key, value in positions.items():
if len(value) > 1 and longest_distance < value[len(value)-1] - value[0]:
longest_distance = value[len(value)-1] - value[0]
return longest_distance

l1 = [1, 3, 5, 3, 7, 8, 9, 1]
l2 = [9]
l3 = []
l4 = [4, 4, 4, 4, 4]
l5 = [10, 10, 3, 4, 5, 4, 10, 56, 4]
print(get_longest_distance_between_same_elements_in_list(l1))
print(get_longest_distance_between_same_elements_in_list(l2))
print(get_longest_distance_between_same_elements_in_list(l3))
print(get_longest_distance_between_same_elements_in_list(l4))
print(get_longest_distance_between_same_elements_in_list(l5))

输出-

7                                                                                                                                                                                  
0                                                                                                                                                                                  
0                                                                                                                                                                                  
4                                                                                                                                                                                  
6

时间复杂度 : O(n(

最新更新