import
java.util.ArrayList;
import
java.util.Arrays;
public
class
Solution {
public
ArrayList<ArrayList<Integer>> threeSum(int[] num) {
Arrays.sort(num);
ArrayList<ArrayList<Integer>> result = new
ArrayList<ArrayList<Integer>>();
for
(int
i = 0; i < num.length;) {
for
(int
j = i+1, k = num.length-1; j < k;) {
int
s = num[i] + num[j] + num[k];
if
(s == 0) {
ArrayList<Integer> x = new
ArrayList<Integer>();
x.add(num[i]);
x.add(num[j]);
x.add(num[k]);
result.add(x);
//skip duplicates
while
(j+1
< k && num[j+1] == num[j]) {
j++;
}
j++;
while
(k-1
> j && num[k-1] == num[k]) {
k--;
}
k--;
}
else
if
(s > 0) {
k--;
}
else{
j++;
}
}
//skip duplicates
while
(i+1
< num.length && num[i+1] == num[i]) {
i++;
}
i++;
}
return
result;
}
}
================================================================= mine
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
Arrays.sort(num);
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
for(int i=0; i < num.length; ){
for(int j = i+1,k = num.length -1; j< k;){
int sum = num[i] + num[j] + num[k];
if(sum == 0){
ArrayList<Integer> x = new ArrayList<Integer>();
x.add(num[i]);
x.add(num[j]);
x.add(num[k]);
result.add(x);
//remove duplicate numbers
while(j+1<k && num[j++] == num[j]){
j++;
}
j++;
while(k-1>j && num[k-1] == num[k]){
k--;
}
k--;
}
else if(sum > 0){
k--;
}
else{
j++;
}
}
while (i+1 < num.length && num[i+1] == num[i]) {
i++;
}
i++;
}
return result;
}
}