题解 | #三数之和#
三数之和
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;
}
}