for从来没有像这样用得如此混乱。
当循环变量在循环中要改变时,最好用while。
vector的clear()不仅会把值清掉,还会把内存清掉。务必注意。
FOR版本:
vector<vector<int> > threeSum(vector<int> &num) {
int sz= num.size();
vector<int> triplet(3);
vector<vector<int> >res;
if(sz<3) return res;
int i,j,k;k=sz-1;
sort(num.begin(),num.end());
for(i=0;i<sz-2;){k=sz-1;
for(j=i+1;j<sz-1 && j<k;){
if(num[i]+num[j]+num[k]==0) {
//triplet.clear();
triplet[0]=num[i];
triplet[1]=num[j];
triplet[2]=num[k];
res.push_back(triplet);
while(j<k && num[j]==num[++j]);
while(k>j && num[k]==num[--k]); }
else if(num[i]+num[j]+num[k]<0)
++j;
else
--k;
}
while(num[i]==num[++i]) ;
}
return res;
}
while版本
vector<vector<int> > threeSum(vector<int> &num) {
int sz= num.size();
vector<int> triplet(3);
vector<vector<int> >res;
if(sz<3) return res;
int i=0,j,k;k=sz-1;
sort(num.begin(),num.end());
while(i<sz-2){
k=sz-1;j=i+1;
while(j<sz-1 && j<k){
if(num[i]+num[j]+num[k]==0) {
//triplet.clear();
triplet[0]=num[i];
triplet[1]=num[j];
triplet[2]=num[k];
res.push_back(triplet);
while(j<k && num[j]==num[++j]);
while(k>j && num[k]==num[--k]);
if(j>=k) break;
}
else if(num[i]+num[j]+num[k]<0)
++j;
else
--k;
}
while(i<j && num[i]==num[++i]) ;
}
return res;
}