| 16 | } |
| 17 | |
| 18 | private void twoSum(int i, int[] nums, List<List<Integer>> results) { |
| 19 | int leftPointer = i + 1; |
| 20 | int rightPointer = nums.length - 1; |
| 21 | int target = -nums[i]; |
| 22 | |
| 23 | while (leftPointer < rightPointer) { |
| 24 | int sum = nums[leftPointer] + nums[rightPointer]; |
| 25 | |
| 26 | if (sum == target) { |
| 27 | List<Integer> triple = new ArrayList<Integer>(); |
| 28 | triple.add(nums[i]); |
| 29 | triple.add(nums[leftPointer]); |
| 30 | triple.add(nums[rightPointer]); |
| 31 | results.add(triple); |
| 32 | leftPointer++; |
| 33 | |
| 34 | while (leftPointer < rightPointer && nums[leftPointer] == nums[leftPointer - 1]) { |
| 35 | leftPointer++; |
| 36 | } |
| 37 | } else if (sum < target) { |
| 38 | leftPointer++; |
| 39 | } else { |
| 40 | rightPointer--; |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 | } |