/*************************************************
题目:找出数组中3个数和为0的组合
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:
[ [-1, 0, 1],
[-1, -1, 2] ]
*************************************************/
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > res;
sort(num.begin(), num.end());
for (int i = 0; i < num.size(); i++)
{
int target = -num[i];
int front = i + 1;
int back = num.size() - 1;
while (front < back)
{
int sum = num[front] + num[back];
if (sum < target)
front++;
else if (sum > target)
back--;
else
{
vector<int> temp(3, 0);
temp[0] = num[i];
temp[1] = num[front];
temp[2] = num[back];
res.push_back(temp);
//处理与第二个数相同的数 ++操作
while (front < back && num[front] == temp[1]) front++;
//处理与第三个数相同的数 --操作
while (front < back && num[back] == temp[2]) back--;
}
}
//处理与第1个数相同的数 ++操作
while (i + 1 < num.size() && num[i + 1] == num[i])
i++;
}
return res;
}[LeetCode]15.threeSum
最新推荐文章于 2024-01-30 01:27:41 发布
本文介绍了一个经典的算法问题——寻找数组中三个数相加等于零的所有可能组合,并提供了一段C++代码实现。该算法首先对数组进行排序,然后通过双指针技巧高效地找到所有符合条件的三元组。

321

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



