题解 | #三数之和#

三数之和

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

相关推荐

01-23 19:12
门头沟学院 Java
榨出爱国基因:你还差 0.1% 就拿到校招礼盒,快叫朋友给你砍一刀吧
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务