题解 | #三数之和#

三数之和

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;
    }
}
全部评论

相关推荐

09-30 15:27
已编辑
成都工业学院 企业文化
Morpheus_:候选人:还需要测验武力值?
投递腾讯等公司10个岗位
点赞 评论 收藏
分享
10-29 22:30
吉林大学 Java
同专业学长学姐,去互联网大厂的起薪&nbsp;15k+,去国企&nbsp;IT&nbsp;岗的也有&nbsp;12k+,就连去中小厂的都基本&nbsp;13k&nbsp;起步😤&nbsp;我投的传统行业技术岗,拼死拼活拿到&nbsp;1Woffer,本来还挺开心,结果逛了圈牛客直接破防,同是校招生,行业差距怎么就这么大啊!
喵喵喵6_6:应该哪里不对吧,大厂都是20k以上的,10k那种对于985本的学生基本就是点击一下过了笔试就送的,我前两天刚拿了一个11k,笔试完第2天就打电话了,非科班。坏消息是c++岗开这么低真是刷新认知了
校招生月薪1W算什么水平
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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