三数之和 public class Q15 { List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(nums); IntStream.range(0, nums.length - 2).filter(i -> i <= 0 || nums[i] != nums[i - 1]).forEachOrdered(i -> twoSum(nums, i)); return res; } private void twoSum(int[] nums, int i) { int left = i + 1; int right = nums.length - 1; int target = -nums[i]; while (left < right) { if (nums[left] + nums[right] < target) { left++; } else if ((nums[left] + nums[right] > target)) { right--; } else { List<Integer> temp = new ArrayList<>(); temp.add(nums[i]); temp.add(nums[left]); temp.add(nums[right]); res.add(temp); while (nums[left] == nums[++left] && left < nums.length - 1) ; while (nums[right] == nums[--right] && right > 0) ; } } } }