题目: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.
Note: The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0. A solution set is: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]解读: 给予一组整数数组array及一个目标整数target,从array中找出所有四个整数组成的数组,这四个整数相加位target,数组不能重复。
思考:①如果采用四重循环来遍历所有结果,会超时,所以要想办法减少计算量。
②如果先把数组进行排序再来筛选可以节省时间。
③为了避免重复,采用set来装目标数组。
code:
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
set<vector<int>> answer;
int i, j, k, p;
sort(nums.begin(), nums.end());
for( i = 0; i < int(nums.size()-3); i++){
for(j = i+1; j < int(nums.size()-2); j++){
k = j+1;
p = nums.size()-1;
while(k<p) {
int s = nums[i]+nums[j]+nums[p]+nums[k];
if(s == target) {
int array[4] = {nums[i],nums[j],nums[k],nums[p] };
vector<int> temp(array, array+4);
answer.insert(temp);
p--;
k++;
} else if(s < target) k++;
else p--;
}
}
}
return vector<vector<int>>(answer.begin(), answer.end());
}
};