首页 > 代码库 > 3Sum

3Sum

Given an array S of n integers, are there elements abc 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:    vector<vector<int> > threeSum(vector<int> &num) {        vector<vector<int> > ans;        if(num.size() < 3) return ans;        sort(num.begin(), num.end());        int pos = 0;        while(num[pos]<0){pos++;}        int zeroind = 0;        while(num[pos+zeroind] == 0) zeroind++;        if(zeroind >= 3) {            vector<int> tmp;            tmp.push_back(0);            tmp.push_back(0);            tmp.push_back(0);            ans.push_back(tmp);        }        int i=0;        int j=pos;        while(i<pos){            j=pos;            while(j<num.size()){                int c = 0 - (num[i] + num[j]);                if(c < 0 && c >= num[i]){                    for(int k=i+1; k<pos; k++){                        if(num[k] == c){                            vector<int> tmp;                            tmp.push_back(num[i]);                            tmp.push_back(c);                            tmp.push_back(num[j]);                            ans.push_back(tmp);                            break;                        }                    }                }                if(c>=0 && c>=num[j]){                    for(int k=j+1; k<num.size(); k++){                        if(num[k] == c){                            vector<int> tmp;                            tmp.push_back(num[i]);                            tmp.push_back(num[j]);                            tmp.push_back(c);                            ans.push_back(tmp);                            break;                        }                    }                }                while(num[j] == num[j+1]) j++;                j++;            }            while(num[i] == num[i+1]) i++;            i++;        }        return ans;    }};

 

3Sum