描述:
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
样例:
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
注意事项
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
思路:
是用二分法确定后两个元素
public class Solution {
/**
* @param numbers : Give an array numbers of n integer
* @return : Find all unique triplets in the array which gives the sum of zero.
*/
public ArrayList<ArrayList<Integer>> threeSum(int[] numbers) {
// write your code here
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(numbers == null || numbers.length<3){
return result;
}
int len = numbers.length;
Arrays.sort(numbers);
for(int i = 0;i<len-2;i++){
int start = i + 1;
int end = len - 1;
while(start < end){
ArrayList<Integer> temp = new ArrayList<Integer>();
if(numbers[start] + numbers[end] == -numbers[i]){
temp.add(numbers[i]);
temp.add(numbers[start]);
temp.add(numbers[end]);
if(!result.contains(temp)){
result.add(temp);
}
start++;
end--;
}else if(numbers[start] + numbers[end] > -numbers[i]){
end--;
}else{
start++;
}
}
}
return result;
}
}