Skip to content

Commit 8e408af

Browse files
committed
feat: add 137. Single Number II
1 parent 123f044 commit 8e408af

File tree

7 files changed

+170
-45
lines changed

7 files changed

+170
-45
lines changed

README.md

Lines changed: 60 additions & 42 deletions
Large diffs are not rendered by default.

docs/images/buymeacoffee.webp

1.24 KB
Binary file not shown.

docs/images/leetcode.png

43.2 KB
Loading

docs/images/leetcode_new.webp

288 KB
Binary file not shown.

src/com/nphausg/leetcode/easy/SingleNumber.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010
* <a href="https://leetcode.com/problems/single-number">136. Single Number</a>
1111
*/
1212
public class SingleNumber {
13+
14+
public static int singleNumber2(int[] nums) {
15+
int result = 0;
16+
for (int num : nums) {
17+
result ^= num;
18+
}
19+
return result;
20+
}
21+
1322
public static int singleNumber(int[] nums) {
1423
HashMap<Integer, Integer> map = new HashMap<>();
1524
for (int num : nums) {
@@ -27,9 +36,10 @@ public static class TestCase extends BaseTest {
2736

2837
@org.junit.Test
2938
public void testCases() {
30-
assertEquals(1, singleNumber(new int[]{1}));
31-
assertEquals(1, singleNumber(new int[]{2, 2, 1}));
32-
assertEquals(4, singleNumber(new int[]{4, 1, 2, 1, 2}));
39+
assertEquals(1, singleNumber2(new int[]{1}));
40+
assertEquals(1, singleNumber2(new int[]{2, 2, 1}));
41+
assertEquals(4, singleNumber2(new int[]{4, 1, 2, 1, 2}));
3342
}
3443
}
3544
}
45+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.nphausg.leetcode.medium;
2+
3+
import com.nphausg.leetcode.config.BaseTest;
4+
5+
import java.util.HashMap;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
/**
10+
* <a href="https://leetcode.com/problems/single-number-ii">137. Single Number II</a>
11+
*/
12+
public class SingleNumberII {
13+
14+
public static int singleNumber2(int[] nums) {
15+
int ones = 0, twos = 0;
16+
for (int num : nums) {
17+
ones = (ones ^ num) & ~twos;
18+
twos = (twos ^ num) & ~ones;
19+
}
20+
return ones;
21+
}
22+
public static int singleNumber(int[] nums) {
23+
HashMap<Integer, Integer> map = new HashMap<>();
24+
for (int num : nums) {
25+
map.put(num, map.getOrDefault(num, 0) + 1);
26+
}
27+
for (int num : map.keySet()) {
28+
if (map.get(num) == 1) {
29+
return num;
30+
}
31+
}
32+
return -1;
33+
}
34+
35+
public static class TestCase extends BaseTest {
36+
37+
@org.junit.Test
38+
public void testCases() {
39+
assertEquals(3, singleNumber2(new int[]{2, 2, 3, 2}));
40+
assertEquals(99, singleNumber2(new int[]{0, 1, 0, 1, 0, 1, 99}));
41+
}
42+
}
43+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.nphausg.leetcode.medium;
2+
3+
4+
import com.nphausg.leetcode.config.BaseTest;
5+
6+
import java.util.HashMap;
7+
8+
import static org.junit.Assert.assertEquals;
9+
10+
/**
11+
* <a href="https://leetcode.com/problems/single-number-iii">260. Single Number III</a>
12+
*/
13+
public class SingleNumberIII {
14+
15+
public static int[] singleNumber2(int[] nums) {
16+
int xor = 0;
17+
for (int num : nums) {
18+
xor ^= num; // XOR toàn bộ mảng
19+
}
20+
int diff = xor & (-xor); // Lấy bit khác biệt
21+
int[] result = new int[2];
22+
for (int num : nums) {
23+
if ((num & diff) == 0) {
24+
result[0] ^= num;
25+
} else {
26+
result[1] ^= num;
27+
}
28+
}
29+
return result;
30+
}
31+
32+
public static int singleNumber(int[] nums) {
33+
HashMap<Integer, Integer> map = new HashMap<>();
34+
for (int num : nums) {
35+
map.put(num, map.getOrDefault(num, 0) + 1);
36+
}
37+
for (int num : map.keySet()) {
38+
if (map.get(num) == 1) {
39+
return num;
40+
}
41+
}
42+
return -1;
43+
}
44+
45+
public static class TestCase extends BaseTest {
46+
47+
@org.junit.Test
48+
public void testCases() {
49+
assertEquals(1, singleNumber2(new int[]{1}));
50+
assertEquals(1, singleNumber2(new int[]{2, 2, 1}));
51+
assertEquals(4, singleNumber2(new int[]{4, 1, 2, 1, 2}));
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)