三数之和为0的三指针实现

来源:互联网 发布:阿里免费h5建站 编辑:程序博客网 时间:2024/05/01 19:44

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;}



0 0
原创粉丝点击