题解 | #三数之和#

三数之和

http://www.nowcoder.com/practice/345e2ed5f81d4017bbb8cc6055b0b711

public class Solution {
     public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        int n = num.length;
        if (n < 3) {
            return res;
        }
        ArrayList<Set<Integer>> temp = new ArrayList<>();
        Arrays.sort(num);//进行排序
        for (int i = 0; i < n; i++) {
            int cur = num[i];//当前记录值
            int left = 0;
            int right = n - 1;
            //在出去num[i]的子数组中寻找而和为-num[i]的二元组
            do {
                //如果与当前元素相等则指针移动
                if (left == i) {
                    left++;
                } else if (right == i) {
                    right--;
                }
                if (left < right) {
                    int val = cur + num[left] + num[right];//记录当前三元组的值
                    if (val == 0) {
                        //
                        Set<Integer> already = new HashSet<>();
                        already.add(cur);
                        already.add(num[left]);
                        already.add(num[right]);
                        //判断是否重复再添加
                        if (!temp.contains(already)) {
                            temp.add(already);
                        }
                        left++;
                        right--;
                    } else if (val < 0) {
                        left++;
                    } else if (val > 0) {
                        right--;
                    }
                }
            } while (left < right);
        }
        for (Set<Integer> set : temp) {
            ArrayList<Integer> t = new ArrayList<>();
            t.addAll(set);
            if (t.size()==1){
                t.add(0);
                t.add(0);
            }else if (t.size()<3){
                t.add(-t.get(0)-t.get(1));
            }
            t.sort(null);
            res.add(t);
        }
        return res;
    }
}
全部评论

相关推荐

10-21 11:29
门头沟学院 C++
女生,武汉人1、瑞声科技,软件开发,南京,已发意向(搜不到相关信息,听面试官说做的方向跟我研究生课题强相关)2、烽火通信,软开,武汉,等开奖(国企,但是网上差评好多)3、四方继保,研发岗,武汉,已谈薪,等开奖(私企,但是福利待遇都挺不错,网上说是入职要出差半年)
7946163461:四方鸡煲,快跑,,,里面管理混乱的一笔,跟你谈的福利根本拿不到全额,,,绩效卡的一笔,你不出差不加班,根本拿不到,出差和加班你也拿不到,,还必须会舔领导,阿谀奉承那种才OK。。。学姐给我的血泪,她已经跑路了,,,烽火你多查查,风评一边倒,,,南京那个风评还可以
投递烽火通信等公司10个岗位 >
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 73人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
牛客279957775号:铁暗恋
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务