1、题目描述
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]
]
2、解题思路
首先将乱序的数组进行排序;
遍历数组的每一个元素;
然后利用上一篇博客TwoSum中的思想,在i之后的元素中寻找是否存在两个元素和为nums[i]的相反数。
3、实现代码
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
auto n=nums.size();
for(int i =0 ; i< n-1; ++i) {
for(int j = 0; j < n-i-1; ++j) {
if(nums[j] > nums[j+1])
{
int tmp = nums[j] ; nums[j] = nums[j+1] ; nums[j+1] = tmp;
}
}
}//bubblesort of nums including resorting of index
vector<vector<int>> a;
for(int i=0;i<n/2;i++){
int j=i+1,k=n-1;
int target=0-nums[i];
while(j<k){
int sum=nums[j]+nums[k];
if(sum<target)
j++;
else if(sum>target)
k--;
else{
vector<int> b{nums[i],nums[j],nums[k]};
cout<<i<<j<<k<<endl;
a.push_back(b);
break;
}
}
}
return a;
}
};