[LeetCode] 3Sum

来源:互联网 发布:网络推广思路 编辑:程序博客网 时间:2024/06/06 11:18

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)

Solution 1:

class Solution {public:    vector<vector<int> > threeSum(vector<int> &num) {        vector<vector<int>> ret;        int len = num.size();        if(len < 3)  return ret;        sort(num.begin(), num.end());        for(int i = 0; i < len-2; i++)        {            if(num[i] > 0)  break;            else if(i > 0 && num[i] == num[i-1]) continue;            for(int j = i+1; j < len-1; j++)            {                if(j > i + 1 && num[j-1] == num[j])    continue;                int temp = 0 - num[i] - num[j];                if(binary_search(num.begin() + j + 1, num.end(), temp))                {                    vector<int> triplet;                    triplet.push_back(num[i]);                    triplet.push_back(num[j]);                    triplet.push_back(temp);                    ret.push_back(triplet);                }            }        }        return ret;    }};


Solution 2:

class Solution {public:    vector<vector<int> > threeSum(vector<int> &num) {        vector<vector<int>> result;        if(num.size() < 3)  return result;        sort(num.begin(), num.end());        for(int i = 0; i < num.size(); i++)        {            if(i > 0 && num[i] == num[i-1])                continue;            int j = i+1, k = num.size() - 1;            while(j < k)            {                if(k < num.size() - 1 && num[k] == num[k+1])                {                    k--;                    continue;                }                int sum = num[i] + num[j] + num[k];                if(sum < 0)                    j++;                else if(sum > 0)                    k--;                else                {                    vector<int> triplet;                    triplet.push_back(num[i]);                    triplet.push_back(num[j]);                    triplet.push_back(num[k]);                    result.push_back(triplet);                    j++;                    k--;                }            }        }        return result;    }};


0 0
原创粉丝点击