python - 如何有效地处理大的排列迭代?
问题描述
如何有效地解决这样的
问题问题
具有目标值 K range(10^6) 的范围数组 (1<s<e<10^9) 需要找到总和为偶数的对
form itertools import product
counter=0
for i in product(array,repeat=k):
if sum(i)%2==0
counter+=1
print(counter)
由于上述代码的问题是它总是在TLE中运行很长的数字,有什么建议可以有效地解决这类问题吗?样本输入
范围(1,10)k=2 arr=[1,2,3,4,5,6,7,8,9,10]
样本输出
{1,1},{1,3},{1,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))
推荐阅读
- gmail-api - Gmail API 添加多个签名
- android - ARCore 以及如何删除它?
- python - vs为r字符串中的反斜杠编码不同的颜色
- javascript - 在垫子时间选择器中添加默认时间
- java - 如何让vscode显示java重载intellisense,如c++
- python - 内核一直在 jupyter notebook 的特定行上死去
- docker - 为什么在 docker 目录中创建的所有文件都被写保护?
- javascript - 如何在 Next.js (SSR) 上检测 Internet Explorer?
- python - python dataframe .duplicated 返回相同值的多次出现
- javascript - 谷歌云函数python中的CORS错误chrome扩展