Three Sum.

Sneha Michelle,Two Pointers

Problem Statement


Algorithm


Code

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        Arrays.sort(nums);
        List<List<Integer>> result = new ArrayList<>();     
 
        for (int i=0;i<nums.length-2;i++){
            if (i==0 ||(i>0 && nums[i]!=nums[i-1])){
                int left = i+1;
                int right = nums.length-1;
                int sum = 0-nums[i];
 
                while(left<right){
                if (nums[left]+nums[right]==sum){
                    result.add(Arrays.asList(nums[i],nums[left],nums[right]));
                        while (left<right && nums[left]==nums[left+1]){
                            left = left+1;
                        }
                        while(right>left && nums[right]==nums[right-1]){
                            right = right - 1;
                        }
                        left++;
                        right--;
                }
                else if(nums[left]+nums[right]>sum){
                    right = right -1;
                }
                else {
                    left = left+1;
                }
            }
            }
        }
 
        return result;
 
    }
}