题解 | #数组中相加和为0的三元组#
数组中相加和为0的三元组
http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711
思路:先排序(升序),一是为了满足题目要求非降序,而是为了使用双指针。
1.一层循环+双指针。
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
ArrayList<ArrayList<Integer>> res=new ArrayList<>();//用于返回
//如果数组长度小于3,直接返回空的res。
if(num.length<3){
return res;
}
//对sum排序
Arrays.sort(num);
for(int i=0;i<num.length-2;i++){
int l=i+1;//左指针
int r=num.length-1;//右指针
while(l<r){
if(num[i]+num[l]+num[r]==0){//判断若满足条件
ArrayList tmp=new ArrayList<>();
tmp.add(num[i]);
tmp.add(num[l]);
tmp.add(num[r]);
if(!res.contains(tmp))//判断若列表中不存在此列表
res.add(tmp);//加入到res
//寻找下一个以num[i]作为第一个数值的符合条件结果
l++;
r=num.length-1;
}else if(num[i]+num[l]+num[r]>0){//若大于0,则指针前移
r--;
}else{//若小于0,指针后移
l++;
}
}
}
return res;//返回结果
}