您的位置:首页 > 其它

[leetcode 15] 3Sum

2014-12-31 23:30 459 查看
Given an array S of n integers,
are there elements a, b, c in S such
that a + b + c =
0? Find all unique triplets in the array which gives the sum of zero.

Note:

Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
The solution set must not contain duplicate triplets.

For example, given array S = {-1 0 1 2 -1 -4},

A solution set is:
(-1, 0, 1)
(-1, -1, 2)

class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > res;
if (num.size() < 3) {
return res;
}
const int target = 0; //可扩展为sum为任意数
sort(num.begin(), num.end());
auto last = num.end();
for (auto i = num.begin(); i < last - 2; i++) {
auto j = i + 1;
if (i > num.begin() && *i == *(i-1)) {
continue;
}
auto k = last - 1;
while (j < k) {
if (*i + *j + *k < 0) {
j++;
while (*j == *(j-1) && j < k) j++;
} else if (*i + *j + *k > 0) {
k--;
while (*k == *(k+1) && j < k) k--;
} else {
res.push_back({*i,*j, *k});
j++;
k--;
while (*j == *(j-1) && j < k) {
j++;
}
while (*k == *(k+1) && j < k) {
k--;
}
}
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: