iven 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)
class Solution { public: int max(int a,int b){return a>b?a:b;} int min(int a, int b){return a<b?a:b;} public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ans; sort(nums.begin(),nums.end()); for(int i=0; i<nums.size();i++) { if (i == 0 || (i > 0 && nums[i] != nums[i-1])) { int lo = i+1; int hi = nums.size()-1; int target = -nums[i]; while(lo<hi) { if(nums[lo]+nums[hi]==target){ vector<int> t; t.push_back(nums[i]); t.push_back(nums[lo]); t.push_back(nums[hi]); ans.push_back(t); while(lo<hi&&nums[lo]==nums[lo+1]) lo++; while(lo<hi&&nums[hi]==nums[hi-1]) hi--; lo++;hi--; } else if(nums[lo]+nums[hi]>target) hi--; else lo++; } } } return ans; } /* vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ans; set<int> iset(nums.cbegin(),nums.cend()); for(int i=0; i<iset.size();i++) { for(int j=i+1;j<iset.size();j++) { int target = -nums[i]-nums[j]; if(iset.find(target)!=iset.end()){ vector<int> t; int d1,d2; d1=max(max(nums[i],nums[j]),target); d2=min(min(nums[i],nums[j]),target); t.push_back(d2); t.push_back(-d1-d2); t.push_back(d1); ans.push_back(t); } } } return ans; }*/ };