题解 | #数组中相加和为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;//返回结果
    }
全部评论

相关推荐

想玩飞盘的菠萝蜜在春...:上交✌🏻也拒?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务