题解 | #三数之和,垃圾解法#

三数之和

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

import java.util.*;
public class Solution {
    /*
    输入:
             [-10,0,10,20,-10,-40]    
    返回值:
            [[-10,-10,20],[-10,0,10]]
    */
    class Three {
        int one ;
        int two ;
        int three ;
        Three(int a , int b , int c) {
            int[] tmp = {a,b,c} ;
            Arrays.sort(tmp) ;
            one = tmp[0] ;
            two = tmp[1] ;
            three = tmp[2] ;
        }
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Three)) return false;
            Three a = (Three) o;
            return one == a.one &&
                    two == a.two &&
                    three == a.three;
        }

        @Override
        public int hashCode() {
            return Objects.hash(one, two, three);
        }
    }
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>() ;
        HashSet<Three> set = new HashSet<>() ;
        Arrays.sort(num) ;
        for(int i = 0 ; i < num.length ; i ++) {
            int shen = 0 - num[i] ;
            int s = 0 ;
            int e = num.length - 1 ;
            while(s < e) {
                if(s == i) {
                    s ++ ;
                } else if(e == i) {
                    e -- ;
                } else {
                    int cur = num[s] + num[e] ;
                    if(cur == shen) {
                        Three th = new Three(num[i] , num[s] , num[e]) ;
                        set.add(th) ;
                        int s_old = num[s] ;
                        while(s < e && num[s] == s_old) {
                            s ++ ;
                        }
                        int e_old = num[e] ;
                        while(s < e && num[e] == e_old) {
                            e -- ;
                        }
                    } else if(cur < shen) {
                        s ++ ;
                    } else {
                        e -- ;
                    }
                }
            }
        }
        //处理set
        for(Three t : set) {
            ArrayList<Integer> ele = new ArrayList<>() ;
            ele.add(t.one) ;
            ele.add(t.two) ;
            ele.add(t.three) ;
            res.add(ele) ;
        }
        return res ;
    }
}

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享
正在热议
# 25届秋招总结 #
443331次浏览 4520人参与
# 春招别灰心,我们一人来一句鼓励 #
42187次浏览 537人参与
# 北方华创开奖 #
107474次浏览 600人参与
# 地方国企笔面经互助 #
7973次浏览 18人参与
# 同bg的你秋招战况如何? #
77166次浏览 569人参与
# 实习必须要去大厂吗? #
55811次浏览 961人参与
# 阿里云管培生offer #
120453次浏览 2220人参与
# 虾皮求职进展汇总 #
116310次浏览 887人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11683次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454962次浏览 34861人参与
# 提前批简历挂麻了怎么办 #
149927次浏览 1978人参与
# 在找工作求抱抱 #
906124次浏览 9423人参与
# 如果公司给你放一天假,你会怎么度过? #
4762次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1196037次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157648次浏览 2267人参与
# 双非本科求职如何逆袭 #
662384次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12806次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35906次浏览 384人参与
# 简历中的项目经历要怎么写? #
86937次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20153次浏览 240人参与
# 我的上岸简历长这样 #
452074次浏览 8089人参与
牛客网
牛客企业服务