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)
Subscribe to see which companies asked this question
class Solution {
public:
/*algorithm: two pointer
*/
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>>result;
int n = nums.size();
sort(nums.begin(),nums.end());
for(int i = 0;i < n;i++){
int l = i+1,h = n-1;
while(l < h){
int sum = nums[i] + nums[l]+nums[h];
if(sum == 0){
int A[]={nums[i],nums[l],nums[h]};
result.push_back(vector<int>(A,A+3));
while((l+1)<h&&nums[l]==nums[l+1])++l;
while(h&&nums[h]==nums[h-1])--h;
++l,--h;
}else if(sum < 0)l++;
else h--;
}
while((i+1)<n && nums[i]==nums[i+1])++i;
}
return result;
}
};