XOR等于零的子列表数

时间:2019-08-08 07:09:26

标签: python

我有一个整数列表,我想知道该列表中有多少个子列表,使得子列表中元素的XOR在内小于O(n * n)时间(最好在O(n)时间。 例如: 列出A = [2,5,7,1,3] 因此,此列表的子列表为:

[2] [2,5] [2,5,7] [2,5,7,1] [2,5,7,1,3]
[5] [5,7] [5,7,1] [5,7,1,3]
[7] [7,1] [7,1,3] 
[1] [1,3]
[3]

在这些子列表中,所需的是:[2,5,7] and [5,7,1,3] because 2^5^7 == 0 and 5^7^1^3 == 0

1 个答案:

答案 0 :(得分:0)

使用zip查找所有可能的子列表,然后使用reduce查找子列表中所有元素的异或值并过滤值为0的那些元素。

>>> from operator import xor
>>> from functools import reduce
>>> 
>>> A = [2,5,7,1,3]
>>> [sl for n in range(len(A)) for sl in zip(*(A[i:] for i in range(n+1))) if not reduce(xor, sl)]
[(2, 5, 7), (5, 7, 1, 3)]