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;
}
};
本文介绍了一种算法,用于在一个整数数组中查找所有和为零的唯一三元组,并确保三元组按升序排列且不包含重复元素。
517

被折叠的 条评论
为什么被折叠?



