题解 | #三数之和#

三数之和

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

import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        int len = num.length;  //获取数组长度
        //特殊值处理,如果数组长度小于3,则返回空数组
        if(len < 3){
            return new ArrayList<>(0);
        }
        Arrays.sort(num);  //对原数组排序
        //创建一个哈希集,值为数组中的值,
        HashMap<Integer,Integer> hashMap = new HashMap<>(len);
        //遍历数组,将数组中的数存入哈希集
        for(int i=0;i<len;i++){
            if(hashMap.containsKey(num[i])){
                hashMap.put(num[i],hashMap.get(num[i]) + 1);
            }else {
                hashMap.put(num[i],1);
            }
        }
        ArrayList<ArrayList<Integer>> array = new ArrayList<>();  //创建一个二维数组
        int temp = 0;
        //,二层遍历数组
        for(int i=0;i<len-1;i++){
            for(int j=i+1;j<len;j++){
                temp = 0 - (num[i] + num[j]);  //三个数相加为0
                if(hashMap.containsKey(temp)){  //如果数组中出现三个数相加为0,则保存为数组,并将数组添加到二维数组中
                    if(temp == num[i] && temp == num[j]){
                        if(hashMap.get(temp) >= 3){
                            ArrayList arrayList = new ArrayList(3);
                            int[] arr = new int[3];
                            arr[0] = num[i];
                            arr[1] = num[j];
                            arr[2] = temp;
                            Arrays.sort(arr);
                            for(int k=0;k<3;k++){
                                arrayList.add(k,arr[k]);
                            }
                            array.add(arrayList);
                        }
                    }else if(temp == num[i]){
                        if(hashMap.get(temp) >= 2){
                            ArrayList arrayList = new ArrayList(3);
                            int[] arr = new int[3];
                            arr[0] = num[i];
                            arr[1] = num[j];
                            arr[2] = temp;
                            Arrays.sort(arr);
                            for(int k=0;k<3;k++){
                                arrayList.add(k,arr[k]);
                            }
                            array.add(arrayList);
                        }
                    }else if(temp == num[j]){
                        if(hashMap.get(num[j]) >= 2){
                            ArrayList arrayList = new ArrayList(3);
                            int[] arr = new int[3];
                            arr[0] = num[i];
                            arr[1] = num[j];
                            arr[2] = temp;
                            Arrays.sort(arr);
                            for(int k=0;k<3;k++){
                                arrayList.add(k,arr[k]);
                            }
                            array.add(arrayList);
                        }
                    }else {
                        ArrayList arrayList = new ArrayList(3);
                        int[] arr = new int[3];
                        arr[0] = num[i];
                        arr[1] = num[j];
                        arr[2] = temp;
                        Arrays.sort(arr);
                        for(int k=0;k<3;k++){
                            arrayList.add(k,arr[k]);
                        }
                        array.add(arrayList);
                    }
                }
            }
        }
        //二维数组去重
        for(int i=0;i<array.size()-1;i++){
            for(int j=i+1;j<array.size();j++){
                if(array.get(i).get(0) == array.get(j).get(0) && array.get(i).get(1) == array.get(j).get(1) && array.get(i).get(2) == array.get(j).get(2)){
                    array.remove(j);
                    j--;
                }
            }
        }
        return array;  //返回二维数组
    }
}

全部评论

相关推荐

07-15 12:24
重庆大学 运营
坏消息:和好工作擦肩而过
给点吧求求了:怎么可能因为差几秒,估计就是简历更好看婉拒了
点赞 评论 收藏
分享
机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
今天 11:12
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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