3Sum

来源:互联网 发布:淘宝发布宝贝没反应 编辑:程序博客网 时间:2024/06/07 03:11

1、结果为vector < vector> res这样的数组时,要记得先把res进行clear;
题目:
Given an array S of n integers, are there elements a, b, c 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)

思路:
1、从两个参数的和变成三个参数的和,基本方法应该和两个参数的一样,只是多加了一个循环for(int i=0;i

class Solution {public:    vector<vector<int> > threeSum(vector<int> &num) {        int len=num.size()-1;        int sum=0;        sort(num.begin(),num.end());        vector<vector<int>> res;        res.clear();        for(int i=0;i<len;i++)        {            if(i>0 && num[i]==num[i-1]) continue;            int j=i+1;            int k=len;            while(j<k)            {                if(j>i+1 && num[j]==num[j-1])                {                    j++;                    continue;                }                if(k<len && num[k]==num[k+1])                {                    k--;                    continue;                }                sum=num[i]+num[j]+num[k];                if(sum>0) k--;                else if(sum<0) j++;                else{                    vector<int>tmp;                    tmp.push_back(num[i]);                    tmp.push_back(num[j]);                    tmp.push_back(num[k]);                    res.push_back(tmp);                    j++;                }            }        }        return res;    }};
0 0
原创粉丝点击