Skip to content

Commit be4f20a

Browse files
Single Number 3
1 parent 6bc3106 commit be4f20a

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package leetcode.medium;
2+
3+
public class SingleNumberIII {
4+
5+
int[] singleNumberIII(int[] nums) {
6+
7+
int xored = 0;
8+
for (int num : nums)
9+
xored ^= num;
10+
11+
// Find exclusive bit
12+
int exbit = 0;
13+
while (true) {
14+
if ((xored & 1) == 1)
15+
break;
16+
xored = xored >> 1;
17+
exbit++;
18+
}
19+
20+
int setBucket = 0;
21+
int unsetBucket = 0;
22+
for (int num : nums)
23+
// If the bit is set, move to set bucket
24+
if (((num >> exbit) & 1) == 1)
25+
setBucket ^= num;
26+
else
27+
unsetBucket ^= num;
28+
29+
return new int[]{setBucket, unsetBucket};
30+
}
31+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package leetcode.medium;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.*;
6+
7+
class SingleNumberIIITest {
8+
9+
private final SingleNumberIII singleNumberIII;
10+
11+
SingleNumberIIITest() {
12+
singleNumberIII = new SingleNumberIII();
13+
}
14+
15+
@Test
16+
void testSingleNumberIII1() {
17+
int[] nums = {2, 2, 3, 6, 3, 4, 12, 4};
18+
int[] expected = {6, 12};
19+
int[] result = singleNumberIII.singleNumberIII(nums);
20+
21+
assertArrayEquals(expected, result);
22+
}
23+
24+
@Test
25+
void testSingleNumberIII2() {
26+
int[] nums = {-1, 0};
27+
int[] expected = {-1, 0};
28+
int[] result = singleNumberIII.singleNumberIII(nums);
29+
30+
assertArrayEquals(expected, result);
31+
}
32+
33+
@Test
34+
void testSingleNumberIII3() {
35+
int[] nums = {0, 1};
36+
int[] expected = {1, 0};
37+
int[] result = singleNumberIII.singleNumberIII(nums);
38+
39+
assertArrayEquals(expected, result);
40+
}
41+
}

0 commit comments

Comments
 (0)