Skip to content

Latest commit

 

History

History

1310

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Given the array arr of positive integers and the array queries where queries[i] = [Li, Ri], for each query i compute the XOR of elements from Li to Ri (that is, arr[Li] xor arr[Li+1] xor ... xor arr[Ri] ). Return an array containing the result for the given queries.

 

Example 1:

Input: arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
Output: [2,7,14,8] 
Explanation: 
The binary representation of the elements in the array are:
1 = 0001 
3 = 0011 
4 = 0100 
8 = 1000 
The XOR values for queries are:
[0,1] = 1 xor 3 = 2 
[1,2] = 3 xor 4 = 7 
[0,3] = 1 xor 3 xor 4 xor 8 = 14 
[3,3] = 8

Example 2:

Input: arr = [4,8,2,10], queries = [[2,3],[1,3],[0,0],[0,3]]
Output: [8,0,4,4]

 

Constraints:

  • 1 <= arr.length <= 3 * 10^4
  • 1 <= arr[i] <= 10^9
  • 1 <= queries.length <= 3 * 10^4
  • queries[i].length == 2
  • 0 <= queries[i][0] <= queries[i][1] < arr.length

Related Topics:
Bit Manipulation

Solution 1.

// OJ: https://leetcode.com/problems/xor-queries-of-a-subarray/
// Author: github.com/lzl124631x
// Time: O(N + Q)
// Space: O(1)
class Solution {
public:
    vector<int> xorQueries(vector<int>& A, vector<vector<int>>& Q) {
        for (int i = 1; i < A.size(); ++i) A[i] ^= A[i - 1];
        vector<int> ans;
        for (auto &q : Q) {
            int from = q[0], to = q[1];
            ans.push_back(A[to] ^ (from ? A[from - 1] : 0));
        }
        return ans;
    }
};