先确定一个数,然后求两个数的和为target,快速算法,编程之美2.12 快速寻找满足条件的两个数
public class Solution {
public List<List<Integer>> threeSum(int[] num) {
Arrays.sort(num);
int len = num.length;
List<List<Integer>> ansList = new ArrayList<List<Integer>>();
for(int i = 0; i < len; i++){
if(i > 0&& num[i] == num[i-1] )continue;
for(int j = i + 1, k = len -1; j < len && k > j; ){
if(j > i+1 && num[j] == num[j-1]) {
j++;
continue;
}
if(num[i] + num[j] +num[k] == 0){
List<Integer> tmpList = new ArrayList<Integer>();
tmpList.add(num[i]);
tmpList.add(num[j]);
tmpList.add(num[k]);
ansList.add(tmpList);
j++;
}
else if(num[j] + num[k] > -num[i]){
k--;
}
else{
j++;
}
}
}
return ansList;
}
}