如何解决如何有效地处理排列的大迭代?
如何有效解决此类问题
问题
目标值为K range(10 ^ 6)的range(1
form itertools import product
counter=0
for i in product(array,repeat=k):
if sum(i)%2==0
counter+=1
print(counter)
作为上述代码的问题,它总是在 TLE 中运行很长时间,是否有任何有效解决此类问题的建议?
样本输入
range(1,10)k = 2 arr=[1,2,3,4,5,6,7,8,9,10]
样本输出
{1,1},{1,3},9}.......{10,8},{10,10}
在(1,10)范围内总共有50对这样的对
解决方法
我会这样解决:
而不是多次遍历列表中的每个项目,我会假设存在大量重复项,从而索引列表中的所有不同元素。例如,整数1到15的随机分布,重复100次。然后提供该列表,我将它们放在字典中并比较索引:
如果键重复2次以上,则如果它是奇数或偶数,则总和为偶数。
否则,如果该键与另一个键的总和为偶数,则检索两个键的所有索引。
import secrets
from collections import defaultdict
x=0
randomlist = []
while x<100:
y=secrets.choice(range(1,15))
randomlist.append(y)
x=x+1
ddict = defaultdict(list)
for i,r in enumerate(randomlist):
ddict[r].append(i)
print(ddict)
for k,v in ddict.items():
if len(v)>=2:
print("even sum - " + str(k) + " : " + str(v))
for i,j in ddict.items():
if (k+i)%2==0 and k!=i:
print("even sum - " + str(k) + " : " + str (i)+ " : " + str(v) + str(j))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。