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.
Notes
Elements in a triplet (a, b, c) must be in non-descending order.(ie, a<= b <= c)
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)
Idea:
1. 3 loops to find all cases.
2. use one loop, then, use two pointer to get the
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(num == null || num.length < 3) return result;
int length = num.length;
//sort the num array, then use front and tail pointer to get the
Arrays.sort(num);
for(int i = 0; i < length - 2; i++)
{
if(num[i] > 0) break;
if(i == 0 || num[i] > num[ i - 1])
{
int a = -num[i];
int front = i + 1;
int tail = length - 1;
while(front < tail)
{
int b = num[front] + num[tail];
if(b == a)
{
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(num[i]);
arr.add(num[front]);
arr.add(num[tail]);
result.add(arr);
//arr.clear();
front++;
tail--;
while(front < tail && num[tail] == num[tail + 1])
{
tail--;
}
while(front < tail && num[front] == num[front - 1]) //
{
front++;
}
} else if(b < a){
front++;
}else {
tail--;
}
}
}
}
return result;
}
}