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: 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] ]
题目要求3个数的和为0的集合,采用与2Sum相同的思想,首先对数组排序o(nlogn),然后确定第一个元素,再在剩下的元素中按照2Sum的元素获取。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int n = nums.size();
vector<vector<int> > result;
if(n<3) return result;
sort(nums.begin(),nums.end());
for(int i=0;i<n-2;i++)
{
if(i>=1&&nums[i]== nums[i-1]) continue;
int s = i+1,e = n-1;
while(s != e)
{
//cout<<"s"<<s<<"e"<<e<<endl;
int temp = nums[s]+nums[e];
if(temp + nums[i] == 0)
{
vector<int> content;
content.push_back(nums[i]);
content.push_back(nums[s]);
content.push_back(nums[e]);
result.push_back(content);
if(s+1 != e)
{
s++;
e--;
}else
break;
}else if(temp+nums[i]>0)
{
e--;
}else
{
s++;
}
}
}
//sort(result.begin(),result.end());
vector<vector<int> >::iterator last = unique(result.begin(),result.end());
//cout<<distance(result.begin(), last)<<endl;
result.resize(distance(result.begin(), last));
//cout<<result.size()<<endl;
return result;
}
};