import java.util.*;
class Solution {
public List<List<Integer>> threeSum(int[] sum) {
List<List<Integer>> result=new LinkedList<>();
if (sum==null||sum.length<3) {
return result;
}
Arrays.sort(sum);//sort
int len=sum.length;
for(int i=0;i<len-2;i++){
if(i>0&&sum[i]==sum[i-1]){
continue;
}
int left=i+1;
int right=len-1;
while(left<right){
int res=sum[i]+sum[left]+sum[right];
if (res>0) {
right--;
}else if (res<0) {
left++;
}else{
result.add(Arrays.asList(sum[i],sum[left],sum[right]));
while(left<right&&sum[left]==sum[left+1]){
left++;
}
while(left<right&&sum[right]==sum[right-1]){
right--;
}
left++;
right--;
}
}
}
return result;
}
}