题目:
分析:
双指针大佬题解:
代码:
cppclass Solution {
public:
vector<vector<int>> threeSum(vector<int>& n) {
vector<vector<int> > vv;
if(n.size()<3) return vv;
sort(n.begin(),n.end());
for(int i=0;i<n.size()-2;i++)
{
while(i<n.size()-2&&i>=1)
{
if(n[i]!=n[i-1]) break;
i++;
}
if(i>=n.size()-2) break;
if(n[i]>0) break;
int k1=i+1;
int k2=n.size()-1;
while(k1<k2)
{
if(n[i]+n[k1]+n[k2]==0)
{
vector<int> v;
v.push_back(n[i]);v.push_back(n[k1]);v.push_back(n[k2]);
vv.push_back(v);
//k1 k2 处理操作。
if(n[k1]==n[k2]) break;
while(1)
{
if(n[k1]!=n[k1+1]) {
k1++;
break;
}
k1++;
}
while(1)
{
if(n[k2]!=n[k2-1]) {
k2--;
break;
}
k2--;
}
}
else if(n[i]+n[k1]+n[k2]<0) k1++;
else k2--;
}
}
return vv;
}
};