您的位置:首页 > 其它

leetcode-15-3sum

2017-09-28 16:45 477 查看

问题

题目:[leetcode-15]

思路

我之间用dfs做的。

但是,这次看到新的方法。算是两根指针夹逼的做法。

相等时的情形,处理比较重要。避免了o(n^3)。如果,i,j不动。就不行。

代码

class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector< vector<int> > ret;
int sz = nums.size();
sort( nums.begin(), nums.end() );
for(int i = 0; i < sz-2; ++i){
if( i && nums[i] == nums[i-1] ) continue;

int j = i+1;
int k = sz-1;
while( j < k ) {
int t = nums[i] + nums[j] + nums[k];
if( t == 0 ) {
vector<int> tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[j]);
tmp.push_back(nums[k]);
ret.push_back(tmp);
++j;
--k;
while(nums[j] == nums[j-1]) ++j;
}
else if( t < 0 ) {
++j;
while(nums[j] == nums[j-1]) ++j;
}
else{
--k;
}
}
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: