擅长:python、mysql、java
<p>操作<code>X ^ 1</code>更改数字的最后一位。因此<code>****1</code>变成<code>****0</code>,反之亦然</p>
<p>所以我们可以看到,对于奇数的<code>X</code>,<code>X ^ 1</code>的值小于<code>X</code>,但是对于偶数的<code>X</code>的值<code>X ^ 1</code>比<code>X</code>大一倍——这正是我们需要的</p>
<p>现在我们可以用偶数异或和来计算子数组。请注意,我们记得从零索引开始的子阵列已经有多少奇偶异或:</p>
<pre><code>def Xors(arr, N):
oddcnt = 0
evencnt = 0
res = 0
x = 0
for p in arr:
x ^= p
if (x % 2):
res += oddcnt
oddcnt += 1
else:
evencnt += 1
res += evencnt
return res
</code></pre>