描述:
给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d)。
样例:
例如,对于给定的整数数组S=[1, 0, -1, 0, -2, 2] 和 target=0. 满足要求的四元组集合为:
(-1, 0, 0, 1)
(-2, -1, 1, 2)
(-2, 0, 0, 2)
思路:
先用嵌套循环指定前两个元素,然后二分法确定后两个元素。一开始使用递归,结果超时了。
public class Solution {
/**
* @param numbers : Give an array numbersbers of n integer
* @param target : you need to find four elements that's sum of target
* @return : Find all unique quadruplets in the array which gives the sum of
* zero.
*/
public ArrayList<ArrayList<Integer>> fourSum(int[] numbers, int target) {
/* your code */
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
Arrays.sort(numbers);
if(numbers == null || numbers.length == 0){
return result;
}
int len = numbers.length;
for(int i = 0 ;i<len-3;i++){
for(int j = i + 1;j<len-2;j++){
int sum = target - (numbers[i] + numbers[j]);
int start = j + 1;
int end = len - 1;
while(start < end){
int sum2 = numbers[start] + numbers[end];
if(sum == sum2){
ArrayList<Integer> temp = new ArrayList<Integer>();
temp.add(numbers[i]);
temp.add(numbers[j]);
temp.add(numbers[start]);
temp.add(numbers[end]);
if(!result.contains(temp)){
result.add(temp);
}
start++;
end--;
}else if(sum2 < sum){
start++;
}else{
end--;
}
}
}
}
return result;
}
}