Question:
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
//********** Hints ************
先给数组排序,之后跟Two Sum类似,遍历一遍数组,对每个index i, target = -num[i], 令两个指针 i+1 和 num.length-1 向中间求和
//*****************************
Solution:
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {
Arrays.sort(num);
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
if(num.length < 3){
return res;
}
for(int i = 0; i<num.length -2; i++){
if(i == 0 || num[i] > num[i-1]){
int target = -num[i];
int start = i+1;
int end = num.length - 1;
while(start < end){
if(num[start] + num[end] == target){
ArrayList<Integer> tmp = new ArrayList<Integer>();
tmp.add(num[i]);
tmp.add(num[start]);
tmp.add(num[end]);
res.add(tmp);
start += 1;
end -= 1;
while(start < end && num[start] == num[start-1]){
start++;
}
while(start < end && num[end] == num[end+1]){
end--;
}
}
else if(num[start] + num[end] > target){
end--;
}
else{
start ++;
}
}
}
}
return res;
}
}