【发布时间】:2017-05-26 00:00:33
【问题描述】:
从一个数组中,我需要找到通过对连续子数组进行异或运算获得的值,然后对由此获得的值进行异或运算。
输入
一行包含作为数组元素的整数。
例如[1,2,3]
输出
将每个测试用例对应的答案打印在单独的行中。
到目前为止,我设法使用循环和递归方法构建了两种策略。 我的方法都没有在大输入大小上提供良好的性能。
例如1 异或 2 异或 3 异或 (1 异或 2) 异或 (2 异或 3) 异或 (1 异或 2 异或 3) = 2
你能建立一个更好的算法吗?也许是动态编程方法?
from functools import reduce
# Calculate the XOR
def XOR(L):
return reduce(lambda x, y: x ^ y, L)
# Recursive approach
def allSubArraysXOR(L,L2=None):
if L2==None:
L2 = L[:-1]
if L==[]:
if L2==[]:
return 0
return allSubArraysXOR(L2,L2[:-1])
return XOR(L) ^ allSubArraysXOR(L[1:],L2)
# Loop - yielding approach
def getAllWindows(L):
for w in range(1, len(L)+1):
for i in range(len(L)-w+1):
yield XOR(L[i:i+w])
a = [int(a_temp) for a_temp in input().strip().split(' ')]
print(allSubArraysXOR(a))
# print(XOR(getAllWindows(a)))
【问题讨论】:
-
如果数组中的值可能是任意的,请更改示例,例如
[ 13, 42, 4711 ].
标签: python arrays algorithm python-3.x bit-manipulation