15. 3Sum

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        //sort array to avoid duplication
        Arrays.sort(nums);
        List<List<Integer>> result = new LinkedList<>();
        for (int i=0; i<nums.length; i++){
            if(i==0 || nums[i]!=nums[i-1]){
                int left = i+1, right = nums.length-1;
                // two pointers
                while(left<right){
                    // avoid duplication!
                    if(left!=i+1 && nums[left]==nums[left-1]){
                        left++;
                    }else if(right!=nums.length-1 && nums[right]==nums[right+1]){
                        right--;
                    }else if(nums[left]+nums[right] == -nums[i]){
                        // java method: Arrays.asList();
                        result.add(Arrays.asList(nums[left], nums[right], nums[i]));
                        left++;
                        right--;
                    }else if(nums[left]+nums[right]>-nums[i]){
                        right--;
                    }else{
                        left++;
                    }
                }
            }
        }
        return result;
    }
}

Last updated