[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/arjunmullick/coding-Interview/master/3Sum.java [Back]  [Original]

class Solution {
    public List threeSum(int[] nums) {
        List result = new ArrayList();
        int n = nums.length;
        if(n == 0) return result;
        
        Arrays.sort(nums);
        
        for(int p1 = 0 ; p1 < n-2 ; p1++){
            if (p1 > 0 && nums[p1 - 1] == nums[p1]) continue; // if we do not want duplicates
                int l = p1+1;
                int r = n-1;
                while(l < r){
                    int sum = nums[l] + nums[r]  + nums[p1];
                    if(sum == 0){ // 0 is the target sum 
                        List list = new ArrayList();
                        list.add(nums[p1]);
                        list.add(nums[l]);
                        list.add(nums[r]);
                        result.add(list);
                        while (l < r && nums[l] == nums[l+1]) l++;//skip same
                        while (l < r && nums[r] == nums[r-1]) r--;//skip same
                    }
                    if(sum < 0){
                        l++;
                    }else{//always consume one element even when sum == 0
                        r--;
                    }
                }
        }
        
        return result;
    }
}

Web Proxy Viewer  |  New URL  |  Original Page