题解 | #三数之和#

三数之和

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

最容易想到的方法:暴力三次遍历循环,注意遍历时要避免三个数相同的情况以及开始时的排序;对三个数排序采用的传统的建立max,min,mid的做法。值得注意的是使用了LinkedHashSet这种结构,能够对ArrayList中重复的数据去重。Arrays.sort中封装的是快速排序,默认非降序排序。
import java.util.*;
public class Solution {
    public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
        int i,j,k;
        ArrayList<ArrayList<Integer>> n = new ArrayList<>();
        Arrays.sort(num);
        for(i = 0;i < num.length;i++){
            for(j = 0;j < num.length;j++){
                for(k = 0;k < num.length;k++){
                    if((i != j && i != k && j != k) && (num[i] + num [j] + num[k] == 0)){
                        ArrayList<Integer> a = new ArrayList<>();
                        int max,min,mid;
                        max = num[i];
                        if(num[j] >= num[i] && num[j] >= num[k])   //等号不可少,否则出错
                            max = num[j];
                        if(num[k] >= num[i] && num[k] >= num[j])
                            max = num[k];
                       
                        min = num[i];
                        if(num[j] <= num[i] && num[j] <= num[k])
                            min = num[j];
                        if(num[k] <= num[i] && num[k] <= num[j])
                            min = num[k];
                        mid = num[i] + num[j] + num[k] - max - min;
                        a.add(min);
                        a.add(mid);
                        a.add(max);
                        n.add(a);
                    }
                }
            }
        }
               //去重
            LinkedHashSet<ArrayList<Integer>> m = new LinkedHashSet<>(n);
            n = new ArrayList<>(m);
            return n;
    }
}
全部评论

相关推荐

09-25 10:34
东北大学 Java
多面手的小八想要自然醒:所以读这么多年到头来成为时代车轮底下的一粒尘
点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务