LC 2527. 查询数组 Xor 美丽值
https://leetcode.cn/problems/find-xor-beauty-of-array/
这题我考虑的是某种抽象思路,就是想化简这个表达式。
整个表达式可以写成 `XOR(x[i] & (x[j] | x[k]))`.
X[i]只是对 `x[j] | x[k]` 做个mask, 所以其实可以把xor算子放在里面,把X[i]移出来。可以表示成为 `(a & b) ^ (a & c) = a & (b ^ c)`.
这样的话上面式子可以改写为 `XOR(x[i] & XOR(x[j] | x[k]))`. 然后其实 `XOR(x[j] | x[k]` 部分都是成对出现的: `(x[j] | x[k]) ^ (x[k] | x[j])`, 所以这个部分就是0. 所以最后整个表达式其实就是 `XOR(x[i])`.
我觉得上面这个过程有点抽象,而且好像有点撞运气的成分。这个分析感觉比较general一些:https://leetcode.cn/problems/find-xor-beauty-of-array/solution/chai-wei-hua-jian-cheng-yi-ge-piao-liang-pun6/
- 每个bit其实是相互独立的,考虑ith上的bit. xor只是和1的奇偶性有关系。
- 假设ith上有x个1,y个0,还有 `n-x = y`
- 表达式就是 `(a|b)&c`. 如果这个bit为1, (a|b)=1, c=1.
- 所以ith上输出1有 `(n^2-y^2) * x` 中可能
class Solution: def xorBeauty(self, nums: List[int]) -> int: ans = 0 for x in nums: ans = ans ^ x return ans