Maximum XOR for Each Query
给一个数字maxbit和一个sorted array, 求返回一个array, 里面的数字是k个query的结果, k是一个数字, 他是数组中每个数字的xor后最大不超过2^maxbit的数的可能数字.
这个题主要先理解题目, 然后已知xor运算是互逆的, 所以先算出所有数的xor, 然后再往前逐个xor即可得到前边数字的xor的数字, 设这个数字为x. 其次, 假设x是3, maxbit是5. 3的二进制就是11, (2^5 -1)的二进制是1111. 因为后边是4位, 所以前边的3可以看做是0011, 那么问题转化成, 1111和0011的最大xor可能取值是多少, 就是1100(1111 xor 0011).
class Solution {
public int[] getMaximumXor(int[] nums, int maximumBit) {
int x = 0;
for(int n : nums){
x ^= n;
}
int[] res = new int[nums.length];
for(int i = nums.length - 1; i >= 0; i--) {
res[nums.length - i - 1] = (x ^ ((int)Math.pow(2, maximumBit) - 1));
x ^= nums[i];
}
return res;
}
}