Leetcode--3Sum

来源:互联网 发布:vb打印字符串 编辑:程序博客网 时间:2024/05/16 16:04

Problem Description:

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)
解法:注意不能输出重复子集,因此代码中用到upper_bound()函数找到下一个不重复的数,代码如下:

class Solution {public:    vector<vector<int> > threeSum(vector<int> &num) {        vector<vector<int> > results;        if(num.size()<3) return results;        vector<int> subset;        sort(num.begin(),num.end());        vector<int>::iterator p=num.begin(),q,flag;        while(p<(num.end()-2))        {            q=p+1;            while(q<num.end()-1)            {                int tag=0-*p-*q;                if(find(q+1,num.end(),tag)!=num.end())                {                flag=find(q+1,num.end(),tag);                subset.push_back(*p);                subset.push_back(*q);                subset.push_back(*flag);                results.push_back(subset);                }                subset.clear();                q=upper_bound(q,num.end()-1,*q);            }            p=upper_bound(p,num.end()-2,*p);        }        return results;    }};



0 0
原创粉丝点击