题意:Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
分析:同3Sum一样的思路,多加了一层循环。
AC代码:
vector<vector<int> > fourSum(vector<int>& nums, int target){
vector<vector<int> > ret;
if(nums.size() < 4) return ret;
sort(nums.begin(), nums.end());
for(int i = 0; i < nums.size() - 3; ++i ){
if(i == 0 || nums[i] != nums[i - 1]){
int three_tar = target - nums[i];
for(int j = i + 1; j < nums.size() - 2; ++ j){
if(j == i + 1 || nums[j] != nums[j - 1]) {
int two_tar = three_tar - nums[j];
for(int p = j + 1, q = nums.size() - 1; p < q;){
if(nums[p] + nums[q] == two_tar){
if(p != j + 1 && nums[p] == nums[p - 1]){
p ++;
q --;
}else{
vector<int> qua;
qua.push_back(nums[i]);
qua.push_back(nums[j]);
qua.push_back(nums[p]);
qua.push_back(nums[q]);
ret.push_back(qua);
p ++;
q --;
}
}else if(nums[p] + nums[q] < two_tar){
p ++;
}else{
q --;
}
}
}
}
}
}
return ret;
}