【发布时间】:2021-01-16 16:28:14
【问题描述】:
我正在尝试解决关于 Codility 的 CountNonDivisible 问题,以下是我的解决方案。我的总分只有 55%。我的逻辑是,我会计算数组中存在的元素的所有除数,然后从数组的总长度中减去它们,以获得每个元素的非除数的数量。
这个问题来自 Codility 的课程部分,可以在第 11 课下的链接中查看: CountNonDvisible
import math
def solution(A):
B = reversed(sorted(A))
d = dict()
n = len(A)
res = dict()
for i in A:
if i not in d:
d[i] = 1
continue
d[i]+= 1
for i in B:
tmp = 0
if i == 1:
res[i] = n-d[i]
continue
if i==2 or i==3:
res[i] = n-d[i]-d.get(1,0)
continue
for j in range(2,int(math.sqrt(i)+1)):
if j in d and i%j == 0:
if j == i//j:
tmp+=d[j]
else:
tmp+=d[j]+d.get(i//j,0)
if d[i]>1:
res[i] = n-tmp-d.get(1,0)-d.get(i)
else:
res[i] = n-tmp-d.get(1,0)-1
ans = []
for i in A:
ans.append(res[i])
return ans
【问题讨论】:
-
代码的作用与您的预期有何不同?请出示minimal reproducible example。
-
好吧,它在 Codility 中没有通过 1 个正确性测试和 3 个性能测试,但是由于测试用例被隐藏,我无法在我的逻辑中找到缺陷。不幸的是,出于同样的原因,没有可重复的例子。
标签: python arrays python-3.x dictionary