3 Sum Zero
https://www.interviewbit.com/old/problems/3-sum-zero/
vector<vector<int> > Solution::threeSum(vector<int> &A) {
sort(A.begin(),A.end());
int i =0;
int n = A.size();
vector<vector<int>> result;
long long int target;
for(int i =0; i<n; i++){
target = -(long long)A[i];
int l = i+1;
int r = n-1;
if(target < 0) break;
while(l<r){
long long int sum = (long long)A[l] +(long long)A[r];
if(sum < target) l++;
else if (sum >target) r--;
else{
vector<int> triplet = {A[i],A[l],A[r]};
result.push_back(triplet);
while(l<r && A[l] == triplet[1]) l++; // For Duplicates
while(l<r && A[r] == triplet[2]) r--; // For Duplicates
}
}
while(i+1 < n && A[i] == A[i+1]) i++; // For Duplicates.
}
return result;
}
vector<vector<int> > Solution::threeSum(vector<int> &A) {
sort(A.begin(), A.end());
int n = A.size();
vector<vector<int> > result;
int c = 0;
for (auto i = 0; i<n-2; ++i)
{
int l = i+1; int r = n-1;
if (i>0 && A[i]==A[i-1])
continue;
while(l<r)
{
auto sum = 0ll+ A[i]+A[l]+A[r];
if(sum==0)
{
vector<int> temp = {A[i], A[l], A[r]};
int s = result.size();
if(s>0 && result[s-1][0]==temp[0] && result[s-1][1]==temp[1] && result[s-1][2]==temp[2]);
else
result.push_back(temp);
++l; --r;
}
else if(sum>0)
--r;
else
++l;
}
}
return result;
}
Comments
Post a Comment