三数之和为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
- 三数之和为0的三指针实现
- 3sum 三数之和为0的简单实现
- 三数之和为0的组合
- 算法练习:两指针之三数之和为0
- 算法练习:两指针之三数之和为0
- 【lintcode】两数之和、三数之和、最接近的三数之和、四数之和小结
- 最接近的三数之和
- 最接近的三数之和
- LintCode 三数之和
- 三数之和
- 题目:三数之和
- LintCode 三数之和
- 三数之和
- LintCode: 三数之和
- 三数之和
- lintcode,三数之和
- 三数之和
- 三数之和
- mysql 开启慢查询
- 用指针比较两数的大小(2)
- centos7 安装ipvsadm
- svn 64bit 不显示图标
- 第十五周 项目3(4)两数和与差
- 三数之和为0的三指针实现
- 【BZOJ】【P2938】【Poi2000】【病毒】【题解】【AC自动机】
- md5解密网站大全
- 控件美化shape
- 使用XAML在WPF项目中承载ArcGIS Engine地图控件开发
- 第十五周项目一——打入“内部”寻“内幕”
- 使用Cacti监控你的网络
- Mac上配置apache和php, mysql and wordpress
- 动态修改数据数组