class Solution {
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
vector<vector<int>> *v =new vector<vector<int>>();
if(num.size()<4) return *v;
sort(num.begin(),num.end());
set<vector<int>> temp;
for(size_t i=0;i<num.size()-3;i++)
{
for(size_t j=i+1;j<num.size()-2;j++)
{
size_t left=j+1;
int right= num.size()-1;
while(left<right)
{
int sum=num[i]+num[j]+num[left]+num[right];
if(sum==target)
{
vector<int> vec;
vec.push_back(num[i]);
vec.push_back(num[j]);
vec.push_back(num[left]);
vec.push_back(num[right]);
temp.insert(vec);
left++;
right--;
}
else if(sum<target)
{
left++;
}
else
{
right--;
}
}
}
}
for(set<vector<int>>::iterator it=temp.begin();it!=temp.end();it++)
{
v->push_back(*it);
}
return *v;
}
};
public:
vector<vector<int> > fourSum(vector<int> &num, int target) {
vector<vector<int>> *v =new vector<vector<int>>();
if(num.size()<4) return *v;
sort(num.begin(),num.end());
set<vector<int>> temp;
for(size_t i=0;i<num.size()-3;i++)
{
for(size_t j=i+1;j<num.size()-2;j++)
{
size_t left=j+1;
int right= num.size()-1;
while(left<right)
{
int sum=num[i]+num[j]+num[left]+num[right];
if(sum==target)
{
vector<int> vec;
vec.push_back(num[i]);
vec.push_back(num[j]);
vec.push_back(num[left]);
vec.push_back(num[right]);
temp.insert(vec);
left++;
right--;
}
else if(sum<target)
{
left++;
}
else
{
right--;
}
}
}
}
for(set<vector<int>>::iterator it=temp.begin();it!=temp.end();it++)
{
v->push_back(*it);
}
return *v;
}
};