File tree Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Expand file tree Collapse file tree 1 file changed +35
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments