Skip to content

Commit c0e15e8

Browse files
committed
3sum
1 parent 8bb51fb commit c0e15e8

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

โ€Ž3sum/eunhwa99.javaโ€Ž

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.List;
4+
5+
// -4 -1 -1 0 2 2
6+
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ
7+
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ
8+
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ
9+
// p1 p2p3 sum = 0 -> p1 ์•ž์œผ๋กœ
10+
// p1 p2 p3 sum = 0 -> p3 ๊ฐ’ ๋‹ค๋ฅธ ๊ฒŒ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์ด๋™
11+
// p1 p2 p3 sum < 0 -> p2 ์•ž์œผ๋กœ ์ธ๋ฐ, p2 > p3 ๋˜๋ฏ€๋กœ p1 ์•ž์œผ๋กœ
12+
// p1 p2 p3 sum = 0 ๋ฐ˜๋ณต
13+
14+
// ์ˆœํšŒ ํšŸ์ˆ˜: n + (n-1) + (n-2) + .. => O(N^2)
15+
16+
class Solution {
17+
public List<List<Integer>> threeSum(int[] nums) {
18+
Arrays.sort(nums); // Sort the array first
19+
List<List<Integer>> answer = new ArrayList<>();
20+
21+
for (int pointer1 = 0; pointer1 < nums.length - 2; pointer1++) {
22+
// pointer1 ์˜ ์ค‘๋ณต ๊ฐ’ skip
23+
if (pointer1 > 0 && nums[pointer1] == nums[pointer1 - 1]) {
24+
continue;
25+
}
26+
27+
int pointer2 = pointer1 + 1; // pointer2 ๋Š” pointer1 ์˜ ํ•œ ์นธ ์•ž
28+
int pointer3 = nums.length - 1; // pointer3 ๋Š” ๋์—์„œ ๋ถ€ํ„ฐ
29+
30+
while (pointer2 < pointer3) {
31+
int sum = nums[pointer1] + nums[pointer2] + nums[pointer3];
32+
33+
if (sum < 0) {
34+
pointer2++;
35+
} else if (sum > 0) {
36+
pointer3--;
37+
} else {
38+
// sum == 0
39+
answer.add(Arrays.asList(nums[pointer1], nums[pointer2], nums[pointer3]));
40+
41+
// pointer2 ์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ
42+
while (pointer2 < pointer3 && nums[pointer2] == nums[pointer2 + 1]) {
43+
pointer2++;
44+
}
45+
46+
// pointer3 ์ค‘๋ณต ๊ฐ’ ์ œ๊ฑฐ
47+
while (pointer2 < pointer3 && nums[pointer3] == nums[pointer3 - 1]) {
48+
pointer3--;
49+
}
50+
51+
// ๋‘ ๊ฐ’ ๋ชจ๋‘ move
52+
pointer2++;
53+
pointer3--;
54+
}
55+
}
56+
}
57+
58+
return answer;
59+
}
60+
}
61+
62+

0 commit comments

Comments
ย (0)