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

Popular posts from this blog

Perfect Peak of Array

Is Rectangle?

Sort array with squares!