15、3Sum
三数之和
给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。
注意事项
在三元组(a, b, c),要求a <= b <= c。
结果不能包含重复的三元组。
样例
如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:
(-1, 0, 1)
(-1, -1, 2)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
sort(nums.begin(),nums.end());
int N=nums.size();
for(int i=0;i<N-2;i++)
{
int left=i+1,right=N-1;
while(left<right)
{
int sum=nums[i]+nums[left]+nums[right];
if(sum<0) left++;
else if(sum>0) right--;
else
{
vector<int> triplet;
triplet.push_back(nums[i]);
triplet.push_back(nums[left]);
triplet.push_back(nums[right]);
res.push_back(triplet);
while(nums[left]==triplet[1])left++;//跳过重复的项
while(nums[right]==triplet[2])right--;
}
}
while(i+1<N&&nums[i]==nums[i+1])i++;//跳过重复的项
}
return res;
}
};