我有一个整数列表,我想知道该列表中有多少个子列表,使得子列表中元素的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
答案 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)]