给出n个(无序且可能重复的)元素的列表,我想计算元素i的数量,以使它们的后继者i + 1也在列表中。
这是一个朋友给我的问题,我找不到元素值高达1,000,000,000的大n(100,000)的最佳解决方案。下面是我目前使用随机生成的列表的方法,该方法需要很长时间才能工作。
import random
temp = random.sample(range(1000000000),random.randint(2,100000))
total_sum = 0
for i in range(len(temp)):
if (temp[i]+1) in temp:
total_sum+=1
print(total_sum)
答案 0 :(得分:2)
使用set:
import random
random.seed(42)
temp = random.sample(range(1000000000), random.randint(2, 100000))
s = set(temp)
total_sum = sum(e + 1 in s for e in temp)
print(total_sum)
输出
7
集合中的查找时间为 O(1),而列表为 O(n)。使用集合的方法是 O(n),您当前的实现是 O(n ^ 2)。