arrays - 如何找到所有异或0的子数组?

标签 arrays algorithm bit-manipulation xor bitwise-xor

问题是找到给定数组的所有子数组,其所有元素的异或都等于零。

例如,如果数组包含元素[13,8,5,3,3],解决方案应该给出所有子数组的索引,如0-23-40-4

该问题与提出的问题相似 here

唯一的区别是我想要满足方程 A0 xor A1 xor...xor An = 0

的所有子数组的索引

最佳答案

这是链接问题的一个相当直接的扩展。在 Python 中,

# Multivalued map from the XOR of array[:i] to i for all i.
prefix_xor_to_stops = {0: [0]}
prefix_xor = 0
for j, x in range(array):
    prefix_xor ^= x
    # Returns the value associated with prefix_xor. Inserts [] if not present.
    stops = prefix_xor_to_stops.setdefault(prefix_xor, [])
    for i in stops:
        yield (i, j+1)
    stops.append(j+1)

和以前一样,想法是当且仅当 array[:i] 的 XOR 等于 XOR 时,子数组 array[i:j] 的 XOR 为零数组[:j]。对于数组的每个后续元素,我们计算以该元素结尾的前缀与以前一个元素结尾的前缀的异或,然后查找上述等式的所有解 i .然后我们插入新的关联并继续。

关于arrays - 如何找到所有异或0的子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57365476/

相关文章:

PHP 数组 : Pop an array of single-element arrays into one array

ruby - 如何使用 Ruby 将对象推送到数组 x 次?

php - 在 foreach 的每次迭代中创建新数组

algorithm - 使用组中项目的总和和数量查找组中的数字

java - 使用算法和 Rectangle.intersects (java/lwjgl) 的碰撞检测

Java - 按位运算未达到预期效果

c - 负数如何存储在内存中?如何知道位表示?

java - 我正在使用运算符 |和 & 但没有得到正确的答案

javascript - 在 JavaScript 中,声明一个数组来存储单个值只是为了方便迭代它好吗?

algorithm - 区间树遍历