题目链接2317. 操作后的最大异或和中等算法原理解法位运算1ms击败100.00%时间复杂度O(N)这题很考验推理能力~~下面一步一步推出来结论①题述操作在干什么设原数某一位是b0或1x的对应位是c0或1当b0时00^c0→原来是0位永远只能是0没法变成1当b1时11^c若c0111→保持1不变若c1100→把1变成0因此这个操作的本质只能把数的二进制位里的1改成0绝不能把0改成1而x是我们能选的任意非负整数这就意味着b0时该位只能还是0b1时我们可以将其保持1或改为0②最大异或和本质对于数位上的每一位来说最终异或的结果取决于所有数该位1的个数当1的个数为奇数时这一位还是1否则就是0异或操作相同为0相异为1③只需保证每个比特位有一个1即可我们想让结果最大那么只需要保证各个二进制位只有一个1即可其余的我们都可以通过题述操作让其变成0怎么实现举个例子假设数组有 3 个数某一位分别是 1、1、0我们可以把第一个数的这一位「保留为 1」不修改它把第二个数的这一位「改成 0」利用操作把 1 变成 0第三个数的这一位本来就是 0不用管这样操作后这一位上的 1 的个数变成了 1奇数异或和的这一位就是 1再举个反例如果原数组某一位全是 0那不管怎么操作所有数的这一位都只能是 0异或和的这一位永远是 0④这就是或运算把③翻译过来那么就是数组中所有的数全或在一起Java代码class Solution { //2317. 操作后的最大异或和 public int maximumXOR(int[] nums) { int ret0; for(int x:nums) ret|x; return ret; } }