Skip to content

Commit b992afb

Browse files
authored
Create xor-operation-in-an-array.cpp
1 parent dd95003 commit b992afb

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

C++/xor-operation-in-an-array.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Time: O(1)
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
int xorOperation(int n, int start) {
7+
return int(n % 2 && start % 2) + 2 * xorNums(n, start / 2);
8+
}
9+
10+
private:
11+
int xorNums(int n, int start) {
12+
return (start % 2)
13+
? start ^ xorNumsBeginEven(n - 1, start + 1)
14+
: xorNumsBeginEven(n, start);
15+
}
16+
17+
int xorNumsBeginEven(int n, int start) {
18+
assert(start % 2 == 0);
19+
// 2*i ^ (2*i+1) = 1
20+
return ((n / 2) % 2) ^ ((n % 2) ? (start + n - 1) : 0);
21+
}
22+
};
23+
24+
// Time: O(n)
25+
// Space: O(1)
26+
class Solution2 {
27+
public:
28+
int xorOperation(int n, int start) {
29+
int result = 0;
30+
for (int i = start + 2 * n - 2; i >= start; i -= 2) {
31+
result ^= i;
32+
}
33+
return result;
34+
}
35+
};

0 commit comments

Comments
 (0)