forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheunhwa99.java
69 lines (56 loc) ยท 2.35 KB
/
eunhwa99.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* ๋ฌธ์ ํ์ด
*/
// -4 -1 -1 0 2 2
// p1 p2 p3 sum < 0 -> p2 ์์ผ๋ก
// p1 p2 p3 sum < 0 -> p2 ์์ผ๋ก
// p1 p2 p3 sum < 0 -> p2 ์์ผ๋ก
// p1 p2p3 sum = 0 -> p1 ์์ผ๋ก
// p1 p2 p3 sum = 0 -> p3 ๊ฐ ๋ค๋ฅธ ๊ฒ ๋์ฌ ๋๊น์ง ์ด๋
// p1 p2 p3 sum < 0 -> p2 ์์ผ๋ก ์ธ๋ฐ, p2 > p3 ๋๋ฏ๋ก p1 ์์ผ๋ก
// p1 p2 p3 sum = 0 ๋ฐ๋ณต
/**
* ์๊ฐ/๊ณต๊ฐ ๋ณต์ก๋
*/
// ์๊ฐ ๋ณต์ก๋ - ์ํ ํ์: n + (n-1) + (n-2) + .. => O(N^2)
// ๊ณต๊ฐ ๋ณต์ก๋ - ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๋ฐ O(n log n)์ ๊ณต๊ฐ + ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ answer ๋ฆฌ์คํธ๋ ๋ฌธ์ ์ ์๊ตฌ์ ๋ฐ๋ผ O(k)์ ๊ณต๊ฐ = O(n log n) (๋ฐฐ์ด ์ ๋ ฌ์ ์ํ ๊ณต๊ฐ) + O(k) (๊ฒฐ๊ณผ ์ ์ฅ ๊ณต๊ฐ)
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums); // Sort the array first
List<List<Integer>> answer = new ArrayList<>();
for (int pointer1 = 0; pointer1 < nums.length - 2; pointer1++) {
// pointer1 ์ ์ค๋ณต ๊ฐ skip
if (pointer1 > 0 && nums[pointer1] == nums[pointer1 - 1]) {
continue;
}
int pointer2 = pointer1 + 1; // pointer2 ๋ pointer1 ์ ํ ์นธ ์
int pointer3 = nums.length - 1; // pointer3 ๋ ๋์์ ๋ถํฐ
while (pointer2 < pointer3) {
int sum = nums[pointer1] + nums[pointer2] + nums[pointer3];
if (sum < 0) {
pointer2++;
} else if (sum > 0) {
pointer3--;
} else {
// sum == 0
answer.add(Arrays.asList(nums[pointer1], nums[pointer2], nums[pointer3]));
// pointer2 ์ค๋ณต ๊ฐ ์ ๊ฑฐ
while (pointer2 < pointer3 && nums[pointer2] == nums[pointer2 + 1]) {
pointer2++;
}
// pointer3 ์ค๋ณต ๊ฐ ์ ๊ฑฐ
while (pointer2 < pointer3 && nums[pointer3] == nums[pointer3 - 1]) {
pointer3--;
}
// ๋ ๊ฐ ๋ชจ๋ move
pointer2++;
pointer3--;
}
}
}
return answer;
}
}