15.3Sum

原题

解决

由于这里用到三个数,如果使用暴力解法必然超时,所以就跳过暴力解法。这题也类似于leetcode第一题2Sum

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {

        Set<List<Integer>> res = new HashSet<>();
        Arrays.sort(nums);
        for(int i = 0; i < nums.length -2; i ++) {
            int l = i + 1, r = nums.length - 1;
            while (l < r ) {
                int sum = nums[i] + nums[l] + nums[r];
                if (sum == 0) {
                    List<Integer> list = new ArrayList<>();
                    list.add(nums[l]);
                    list.add(nums[i]);
                    list.add(nums[r]);
                    res.add(list);
                    l++;r--;
                } else if (sum < 0) {
                    l++;
                } else {
                    r--;
                }
            }
        }
        return new ArrayList<>(res);
    }
}

耗时多,占用空间大,需要做优化。