题目描述:
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
注意:
1)在三元组(a, b, c),要求a <= b <= c。
2)结果不能包含重复的三元组。
例如:给定数组S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
思路:
先对数组排序,然后第一个数先固定,后两个数一个在最前,一个在最后,进行遍历。然后第一个数后移,再进行遍历。
代码:
vector<vector<int>> threeSum(vector<int>&nums)
{
//先对数组进行排序
sort(nums.begin(), nums.end()); //需要包含#include <algorithm>命名空间
vector<vector<int>> ret; //数组ret存放返回结果
for(size_t current = 0; current <nums.size(); current++)
{
//由于题目要求不能有重复的,因此,如果当前数与前一个相同,则忽略
if(current > 0 &&nums[current] == nums[current - 1])
{
continue;
}
size_t front = current + 1;
size_t back = nums.size() - 1;
while(front < back)
{
if(front > current + 1 &&nums[front] == nums[front - 1])
{
front++;
continue;
}
if(nums[current] + nums[front] + nums[back] < 0)
{
front++;
}
elseif(nums[current] + nums[front] + nums[back] > 0)
{
back--;
}
else
{
vector<int> temp(3);
temp.push_back(nums[current]);
temp.push_back(nums[front]);
temp.push_back(nums[back]);
ret.push_back(temp);
front++;
}
}
}
return ret;
}