Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]
Solution
publicclassSolution {publicArrayList<ArrayList<Integer>> threeSum(int[] num) {ArrayList<ArrayList<Integer>> result =newArrayList<ArrayList<Integer>>();if(num ==null||num.length<=2) return result;Arrays.sort(num);int size =num.length;for(int i =0; i <= size -3; i ++ ){if(i >0&& num[i] == num[i-1])continue;int low = i +1;int high = size -1;while (low < high){int sum = num[i] + num[low] + num[high];if(sum ==0){ArrayList<Integer> cur =newArrayList<Integer>();cur.add(num[i]);cur.add(num[low]);cur.add(num[high]);result.add(cur); low ++;while(low < size-2&& num[low -1] == num[low]) low ++; high --;while(high > i && num[high +1] == num[high]) high --; }elseif(sum >0) high --;else low ++; } }return result; }}