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

相关推荐

点赞 评论 收藏
分享
10-29 16:42
门头沟学院 Java
1.今天什么国标的公司打电话约面试,还得准备ppt,好麻烦,网上查薪资一般,打算拒了,不面了2.字节又复活了,什么安全开发,也不知道怎么样,面一面试试吧,还是挺想去字节的,但好难,随缘吧所以今天没面试
嵌入式的小白:面试前可以好好准备下 1.看看你投递的岗位的岗位描述,分析下是哪个业务线,同使要罗列他们描述中提到的技术点 2.根据1中的两点准备 3.岗位描述中应该还有语言要求,这个刷刷八股,要是对自己语言能力很有把握,那就不用看这点了 4.找下你简历中项目部分,看有没有和岗位描述中技术点重合的,这种在面试提到项目时,是高概率问题 好好准备,祝你面试顺利
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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