|
| 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