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)
思路:对数组排序,然后以每一个数为中心,从两端向该数逼近,找到和为0的数
代码:
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
int len=num.size();
vector<vector<int> > res;
map<vector<int>,int> dup;
vector<int> temp;
res.clear();
if(len<=2) return res;
sort(num.begin(),num.end());
for(int i=1;i<len;i++){
int left=0,right=len-1;
while(left<i && right>i){
int sum=num[left]+num[i]+num[right];
if(sum==0){
temp.clear();
temp.push_back(num[left]);
temp.push_back(num[i]);
temp.push_back(num[right]);
if(dup.find(temp)==dup.end()){
res.push_back(temp);
}
dup[temp]=1;
left++;
right--;
}
if(sum>0){
right--;
}
if(sum<0){
left++;
}
}
}
return res;
}
};