给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d)。
样例
例1:
输入:[2,7,11,15],3
输出:[]
例2:
输入:[1,0,-1,0,-2,2],0
输出:
[[-1, 0, 0, 1]
,[-2, -1, 1, 2]
,[-2, 0, 0, 2]]
注意事项
四元组(a, b, c, d)中,需要满足a <= b <= c <= d
答案中不可以包含重复的四元组。
class Solution {
public:
/**
* @param numbers: Give an array
* @param target: An integer
* @return: Find all unique quadruplets in the array which gives the sum of zero
*/
vector<vector<int>> fourSum(vector<int> &numbers, int target) {
// write your code here
vector<vector<int>> result;
set<vector<int>> judge;
sort(numbers.begin(),numbers.end());
int len=numbers.size();
if(len<4) return result;
for (int i = 0; i < len-3; i++) {
/* code */
if(i!=0&&numbers[i]==numbers[i-1]) continue;
for(int j=i+1; j < len-2; j++)
{
if(j!=i+1&&numbers[j]==numbers[j-1]) continue;
int left=j+1;
int right=len-1;
while(left<right)
{
int sum=numbers[i]+numbers[j]+numbers[left]+numbers[right];
vector<int> tmp={numbers[i],numbers[j],numbers[left],numbers[right]};
if(sum==target&&!judge.count(tmp))
{
left++;
right--;
result.push_back(tmp);
judge.insert(tmp);
}
else if(sum<target) left++;
else right--;
}
}
}
return result;
}
};