You are given a sorted array nums of n non-negative integers and an integer maximumBit. You want to perform the following query ntimes:
Find a non-negative integer k < 2maximumBit such that nums[0] XOR nums[1] XOR ... XOR nums[nums.length-1] XOR k is maximized. k is the answer to the ith query.
Remove the last element from the current array nums.
Return an arrayanswer, where answer[i] is the answer to the ith query.
Example 1:
Input: nums = [0,1,1,3], maximumBit = 2
Output: [0,3,2,3]
Explanation: The queries are answered as follows:
1st query: nums = [0,1,1,3], k = 0 since 0 XOR 1 XOR 1 XOR 3 XOR 0 = 3.
2nd query: nums = [0,1,1], k = 3 since 0 XOR 1 XOR 1 XOR 3 = 3.
3rd query: nums = [0,1], k = 2 since 0 XOR 1 XOR 2 = 3.
4th query: nums = [0], k = 3 since 0 XOR 3 = 3.
Example 2:
Input: nums = [2,3,4,7], maximumBit = 3
Output: [5,2,6,5]
Explanation: The queries are answered as follows:
1st query: nums = [2,3,4,7], k = 5 since 2 XOR 3 XOR 4 XOR 7 XOR 5 = 7.
2nd query: nums = [2,3,4], k = 2 since 2 XOR 3 XOR 4 XOR 2 = 7.
3rd query: nums = [2,3], k = 6 since 2 XOR 3 XOR 6 = 7.
4th query: nums = [2], k = 5 since 2 XOR 5 = 7.
First, we preprocess the XOR sum \(xs\) of the array nums, i.e., \(xs=nums[0] \oplus nums[1] \oplus \cdots \oplus nums[n-1]\).
Next, we enumerate each element \(x\) in the array nums from back to front. The current XOR sum is \(xs\). We need to find a number \(k\) such that the value of \(xs \oplus k\) is as large as possible, and \(k \lt 2^{maximumBit}\).
That is to say, we start from the \(maximumBit - 1\) bit of \(xs\) and enumerate to the lower bit. If a bit of \(xs\) is \(0\), then we set the corresponding bit of \(k\) to \(1\). Otherwise, we set the corresponding bit of \(k\) to \(0\). In this way, the final \(k\) is the answer to each query. Then, we update \(xs\) to \(xs \oplus x\) and continue to enumerate the next element.
The time complexity is \(O(n \times m)\), where \(n\) and \(m\) are the values of the array nums and maximumBit respectively. Ignoring the space consumption of the answer, the space complexity is \(O(1)\).
Similar to Solution 1, we first preprocess the XOR sum \(xs\) of the array nums, i.e., \(xs=nums[0] \oplus nums[1] \oplus \cdots \oplus nums[n-1]\).
Next, we calculate \(2^{maximumBit} - 1\), which is \(2^{maximumBit}\) minus \(1\), denoted as \(mask\). Then, we enumerate each element \(x\) in the array nums from back to front. The current XOR sum is \(xs\), then \(k=xs \oplus mask\) is the answer to each query. Then, we update \(xs\) to \(xs \oplus x\) and continue to enumerate the next element.
The time complexity is \(O(n)\), where \(n\) is the length of the array nums. Ignoring the space consumption of the answer, the space complexity is \(O(1)\).