class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int>> a;
vector<int>b;
if(num.empty()) return a;
sort(num.begin(), num.end());
for(int i=0;i<num.size()-2;i++)
{
int j=i+1,r=num.size()-1;
if(num[i]>0) break;
while(j<r)
{
int target=num[i]+num[j]+num[r];
if(target>0) r--;
else if(target<0) j++;
else
{
b.push_back(num[i]);
b.push_back(num[j]);
b.push_back(num[r]);
a.push_back(b);
b.clear();
j++,r--;
}
}
}
set<vector<int>> w(a.begin(),a.end());
a.assign(w.begin(),w.end());
return a;
}
};
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int>> a;
vector<int>b;
if(num.empty()) return a;
sort(num.begin(), num.end());
for(int i=0;i<num.size()-2;i++)
{
int j=i+1,r=num.size()-1;
if(num[i]>0) break;
while(j<r)
{
int target=num[i]+num[j]+num[r];
if(target>0) r--;
else if(target<0) j++;
else
{
b.push_back(num[i]);
b.push_back(num[j]);
b.push_back(num[r]);
a.push_back(b);
b.clear();
j++,r--;
}
}
}
set<vector<int>> w(a.begin(),a.end());
a.assign(w.begin(),w.end());
return a;
}
};