Skip to content

Commit ea18222

Browse files
committed
Runtime: 51 ms (Top 98.57%) | Memory: 38.10 MB (Top 95.53%)
1 parent ececcea commit ea18222

File tree

1 file changed

+17
-40
lines changed

1 file changed

+17
-40
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,25 @@
1+
// Runtime: 51 ms (Top 98.57%) | Memory: 38.10 MB (Top 95.53%)
2+
13
class Solution {
24
public:
3-
4-
// we know that (x ^ x) = 0,
5-
6-
// arr = [1,4,8,3,7,8], let we have to calculate xor of subarray[2,4]
7-
8-
// (1 ^ 4 ^ 8 ^ 3 ^ 7) ^ (1 ^ 4) = (8 ^ 3 ^ 7), this is nothing but prefix[right] ^ prefix[left - 1]
9-
10-
// (1 ^ 1 = 0) and (4 ^ 4) = 0
11-
12-
135
vector<int> xorQueries(vector<int>& arr, vector<vector<int>>& queries) {
14-
15-
int n = queries.size();
16-
17-
// find the prefix xor of arr
18-
19-
for(int i = 1; i < arr.size(); i++)
20-
{
21-
arr[i] = (arr[i - 1] ^ arr[i]);
6+
int n = arr.size();
7+
int q = queries.size();
8+
vector<int> answer(q, 0);
9+
vector<int> prefXor(n, 0);
10+
11+
prefXor[0] = arr[0];
12+
for(int i = 1; i < n; i++) {
13+
prefXor[i] = prefXor[i - 1] ^ arr[i];
2214
}
23-
24-
// calculate each query
25-
26-
vector<int> res(n);
27-
28-
for(int i = 0; i < n; i++)
29-
{
15+
16+
for(int i = 0; i < q; i++) {
3017
int left = queries[i][0];
31-
3218
int right = queries[i][1];
33-
34-
// find the xorr of the subarray
35-
36-
int xorr = arr[right];
37-
38-
if(left > 0)
39-
{
40-
xorr ^= arr[left - 1];
41-
}
42-
43-
res[i] = xorr;
19+
if(left == 0) answer[i] = prefXor[right];
20+
else answer[i] = prefXor[right] ^ prefXor[left - 1];
4421
}
45-
46-
return res;
22+
23+
return answer;
4724
}
48-
};
25+
};

0 commit comments

Comments
 (0)