[leetcode] 3Sum

来源:互联网 发布:阿里巴巴标题优化技巧 编辑:程序博客网 时间:2024/06/05 14:37

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)

思路:对数组排序,然后以每一个数为中心,从两端向该数逼近,找到和为0的数

代码:

class Solution {public:    vector<vector<int> > threeSum(vector<int> &num) {        int len=num.size();        vector<vector<int> > res;        map<vector<int>,int> dup;        vector<int> temp;        res.clear();        if(len<=2) return res;        sort(num.begin(),num.end());        for(int i=1;i<len;i++){            int left=0,right=len-1;            while(left<i && right>i){                int sum=num[left]+num[i]+num[right];                if(sum==0){                    temp.clear();                    temp.push_back(num[left]);                    temp.push_back(num[i]);                    temp.push_back(num[right]);                    if(dup.find(temp)==dup.end()){                        res.push_back(temp);                    }                    dup[temp]=1;                    left++;                    right--;                }                if(sum>0){                    right--;                }                if(sum<0){                    left++;                }            }        }        return res;    }};


0 0
原创粉丝点击