public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
HashSet<ArrayList<Integer>> triplets = new HashSet<ArrayList<Integer>>();
Arrays.sort(num);
// Two pointers scan
for(int i = 0; i < num.length - 2; i++) {
int left = i + 1, right = num.length - 1;
while(left < right) {
int sum = num[i] + num[left] + num[right];
if(sum == 0) {
ArrayList<Integer> triplet = new ArrayList<Integer>();
triplet.add(num[i]);
triplet.add(num[left]);
triplet.add(num[right]);
triplets.add(triplet);
left++;
right--;
} else if(sum < 0) {
left++;
} else {
right--;
}
}
}
return new ArrayList(triplets);
}
}
Time: O(n^2)
Space: O(1)