双指针法
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
sort(num.begin(),num.end());
int len = num.size();
vector<vector<int>> ans;
vector<int> tmp;
for (int i=0;i<len;i++) {
if (i>0&&num[i]==num[i-1]) continue;
int j = i+1;
int k = len-1;
while (j<k) {
if (j>i+1&&num[j]==num[j-1]) {j++;continue;} // two
if (k<len-1&&num[k]==num[k+1]) {k--;continue;}//two j===len k==len-1
int sum = num[i]+num[j]+num[k];
if(sum==0) {
tmp.clear();
tmp.push_back(num[i]);
tmp.push_back(num[j]);
tmp.push_back(num[k]);
ans.push_back(tmp);
j++;
}
else if(sum<0) j++;
else k--;
}
}
return ans;
}
};