原题链接
https://leetcode.cn/problems/maximum-xor-after-operations/
非常巧妙的一道题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 首先这个任意的非负x 不需要是在数组内出现的 就是一个任意数
* nums[i] and (nums[i] xor x)
* 则 x 可以选一个 x 的二进制为 1 的位置 而 nums[i] 为0 x的二进制位置为0 nums[i]为0 的数 (即起到保留x所有的1的效果)
* 则可将 nums[i] xor x 化简为 x
* 从而得到 原式 = nums[i] and x = x
* 最终答案求 MaxSum(nums[0..n]) xor x
* 最终求的结果中1 越多则其值就越大 即在异或运算的过程中 尽可能多的 留1
* 即 只要 nums[0..n] 中 一位 有1 不管是奇数还是偶数 都可以 使用x进行调整从而将1 保留 (偶数 则 x 在这位取1 否则取0)
* 从而演变为 nums[0..n] 的 或运算 (因为或运算只要有1 就会输出1)
*/

class Solution {
public int maximumXOR(int[] nums) {
for(int i=1 ; i<nums.length ; i++){
nums[i] = nums[i] | nums[i-1];
}

return nums[nums.length - 1];
}
}