【发布时间】:2022-02-01 04:22:28
【问题描述】:
所以我有一个 1 和 0 的列表:
[1, 1, 0, 0, 1, 1, 0, 1, 1, 1]
还有一个数字列表:[3, 4, 15]
我必须找到这些数字的所有质因数,并翻转第一个列表中与这些数字的质因数相对应的状态。
所以对于上面的例子:
数字[0] = 3,质因数只有 3
所以在状态改变后,数组看起来像:
[1, 1, 1, 0, 1, 0, 0, 1, 0, 1],所以每个 (i + 1) % 3 == 0 个位置都被翻转了
数字[1] = 4,质因数只有 2
所以在状态改变后,数组看起来像:
[1, 0, 1, 1, 1, 1, 0, 0, 0, 0]
数字[3] = 15,质因数只有 3、5
所以在状态改变后,数组看起来像:
[1, 0, 0, 1, 1, 0, 0, 0, 1, 0]
[1, 0, 0, 1, 0, 0, 0, 0, 1, 1]
这是我目前所拥有的:
from collections import Counter
def prime_factors(num):
i = 2
factors = []
while i * i < = num:
if (num % i):
i += 1
else:
num //= i
factors.append(i)
if (num > 1):
factors.append(num)
return list(set(factors))
def flip(states, numbers):
factors = []
for num in numbers:
factors.extend(prime_factors(num))
facotrs = Counter(factors)
for key, val in factors.items():
if val % 2:
for i in range(len(states)):
if ((i + 1) % factor == 0):
states[i] = 1 if states[i] == 0 else 0
return states
这很好用,但对于大型列表,它是 TLE。
如何解决这个问题以使其更快?
【问题讨论】:
-
原始问题的链接是什么?
-
没有。这是针对一家公司的hackerrank编码挑战。我有 13/15 个测试用例通过,最后 2 个超过时间限制
-
另外,如果这是一个OA,你应该知道问题的约束。这些限制是什么?
标签: python arrays binary primes flip